📅  最后修改于: 2023-12-03 15:35:13.182000             🧑  作者: Mango
Swing 是一个用于开发图形用户界面 (GUI) 应用程序的 Java 框架。Swing 提供了丰富的 GUI 组件,如按钮、文本框、下拉框、表格等,并且可以通过组合这些组件来创建复杂的 GUI。
Swing 中的组件最基本的容器是 JComponent
类。除此之外,Swing 还提供了其他容器来帮助程序员组合和管理界面元素。本文将介绍 Swing 中的容器。
JFrame 是最基本的顶层容器。它代表包含一个标题栏和一个内容区域的窗口。程序员可以向其添加各种组件,如按钮、标签和文本框等。下面是创建并设置 JFrame 的示例代码:
import javax.swing.*;
public class MyFrame extends JFrame {
public MyFrame() {
super("My Frame");
setSize(400, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 添加组件
JLabel label = new JLabel("Hello, world!");
getContentPane().add(label);
}
public static void main(String[] args) {
MyFrame frame = new MyFrame();
frame.setVisible(true);
}
}
这段代码创建了一个带有标题 “My Frame” 的 JFrame,并设置了其大小为 400x300
。程序在关闭窗口时将退出程序。在 MyFrame
构造函数中添加了一个 JLabel
组件,程序将在窗口中显示文本 “Hello, world!”
JPanel 是一个具有流布局的容器,可以用来组合和管理多个组件。JPanel 可以作为容器添加到其他容器中,也可以被其他容器添加到其中。下面是创建并设置 JPanel 的示例代码:
import javax.swing.*;
public class MyPanel extends JPanel {
public MyPanel() {
// 添加组件
JLabel label1 = new JLabel("Name:");
JTextField textField1 = new JTextField(10);
JLabel label2 = new JLabel("Age:");
JTextField textField2 = new JTextField(2);
add(label1);
add(textField1);
add(label2);
add(textField2);
}
public static void main(String[] args) {
JFrame frame = new JFrame("My Frame");
frame.setSize(400, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MyPanel panel = new MyPanel();
frame.getContentPane().add(panel);
frame.setVisible(true);
}
}
这段代码创建了一个带有流布局的 JPanel,将两个 JLabel 和 JTextField 组件添加进来。在主函数中,创建了一个 JFrame 并向其添加 MyPanel 容器,最终将 JFrame 显示出来。
JScrollPane 是一个带有滚动条的容器,用于包含大量数据的组件,如 JTable 和 JList 等。如果组件的大小超出了 JScrollPane 的可见区域,那么就会出现滚动条。下面是创建并设置 JScrollPane 的示例代码:
import javax.swing.*;
import java.awt.*;
public class MyScrollPane extends JPanel {
public MyScrollPane() {
setLayout(new BorderLayout());
// 创建大量数据的组件
JTextField textField = new JTextField();
for (int i = 0; i < 100; i++) {
textField.setText(textField.getText() + "Line " + i + "\n");
}
JScrollPane scrollPane = new JScrollPane(textField);
add(scrollPane, BorderLayout.CENTER);
}
public static void main(String[] args) {
JFrame frame = new JFrame("My Frame");
frame.setSize(400, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MyScrollPane panel = new MyScrollPane();
frame.getContentPane().add(panel);
frame.setVisible(true);
}
}
这段代码创建了一个有大量文本数据的 JTextField,用 JScrollPane 来包含它。当 JTextField 大于 MyScrollPane 的可见区域时,将出现纵向和横向的滚动条。
BoxLayout 是一个容器,也是一个布局管理器。它可以让开发者将组件摆放在水平或垂直方向上,实现流式布局。BoxLayout 可以与 JComponent 搭配使用,也可以作为其他容器的布局管理器。下面是一个将组件垂直排列的 BoxLayout 示例代码:
import javax.swing.*;
public class MyBoxLayout extends JPanel {
public MyBoxLayout() {
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
// 添加组件
JButton button1 = new JButton("Button 1");
JButton button2 = new JButton("Button 2");
JButton button3 = new JButton("Button 3");
add(button1);
add(button2);
add(button3);
// 添加空白区域
add(Box.createVerticalGlue());
// 添加居中对齐的文本
JLabel label = new JLabel("Bottom Label");
label.setAlignmentX(JLabel.CENTER_ALIGNMENT);
add(label);
}
public static void main(String[] args) {
JFrame frame = new JFrame("My Frame");
frame.setSize(400, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MyBoxLayout panel = new MyBoxLayout();
frame.getContentPane().add(panel);
frame.setVisible(true);
}
}
这段代码创建了一个具有垂直流式布局的 MyBoxLayout JPanel。三个 JButton 组件按照竖直方向被添加到 MyBoxLayout 中,通过 Box.createVerticalGlue()
添加了一个空白区域。居中对齐的 JLabel 添加到了最底部。
以上就是 Swing 中常用的几个容器。程序员可以结合使用它们,创建各种复杂的 GUI 界面。