📜  SWING-布局(1)

📅  最后修改于: 2023-12-03 14:47:48.359000             🧑  作者: Mango

介绍SWING布局

什么是SWING?

SWING是Java平台的一部分,用于构建图形用户界面(GUI)。它是一个图形用户界面工具包,提供了一组丰富的组件,如按钮、标签、文本框、下拉列表,以及更复杂的组件,如表格、树形结构等。SWING还提供了丰富的界面布局管理器。

什么是SWING布局?

SWING布局管理器是一种用于安排组件在容器中的方式。SWING提供了许多不同的布局管理器。

SWING布局管理器
1. BorderLayout

borderlayout

BorderLayout将容器划分为五个区域:北、南、东、西和中。组件可以放置在任何一个区域中,但是不能覆盖多个区域。如果没有任何组件放置在中心区域,则中心区域将自动扩展以填充剩余的空间。

使用示例:

JFrame frame = new JFrame("BorderLayout Example");

JButton northButton = new JButton("North");
frame.add(northButton, BorderLayout.NORTH);

JButton southButton = new JButton("South");
frame.add(southButton, BorderLayout.SOUTH);

JButton eastButton = new JButton("East");
frame.add(eastButton, BorderLayout.EAST);

JButton westButton = new JButton("West");
frame.add(westButton, BorderLayout.WEST);

JTextArea centerTextArea = new JTextArea();
frame.add(centerTextArea, BorderLayout.CENTER);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
2. FlowLayout

flowlayout

FlowLayout按照从左到右、从上到下的顺序依次排列组件。如果容器不能容纳所有组件,则会自动换行。

使用示例:

JFrame frame = new JFrame("FlowLayout Example");

JButton button1 = new JButton("Button 1");
frame.add(button1);

JButton button2 = new JButton("Button 2");
frame.add(button2);

JButton button3 = new JButton("Button 3");
frame.add(button3);

JButton button4 = new JButton("Button 4");
frame.add(button4);

frame.setLayout(new FlowLayout());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
3. GridLayout

gridlayout

GridLayout将容器分成一系列指定数量的行和列,组件依次按照行和列的顺序排列。所有组件都会被调整为相同的大小。

使用示例:

JFrame frame = new JFrame("GridLayout Example");

JButton button1 = new JButton("Button 1");
frame.add(button1);

JButton button2 = new JButton("Button 2");
frame.add(button2);

JButton button3 = new JButton("Button 3");
frame.add(button3);

JButton button4 = new JButton("Button 4");
frame.add(button4);

frame.setLayout(new GridLayout(2, 2));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
4. BoxLayout

boxlayout

BoxLayout按照沿着一个指定的轴线(水平或垂直)排列组件。在Box容器中,组件可以被嵌套在其他组件之中以达到更复杂的布局效果。

使用示例:

JFrame frame = new JFrame("BoxLayout Example");

JButton button1 = new JButton("Button 1");
frame.add(button1);

JButton button2 = new JButton("Button 2");
frame.add(button2);

JButton button3 = new JButton("Button 3");
frame.add(button3);

Box horizontalBox = Box.createHorizontalBox();
horizontalBox.add(Box.createHorizontalGlue());
horizontalBox.add(button1);
horizontalBox.add(Box.createHorizontalStrut(10));
horizontalBox.add(button2);
horizontalBox.add(Box.createHorizontalStrut(10));
horizontalBox.add(button3);
horizontalBox.add(Box.createHorizontalGlue());

frame.add(horizontalBox);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
5. GroupLayout

grouplayout

GroupLayout支持创建复杂的GUI布局,允许你以异步方式修改布局容器中的组件。此布局管理器适用于图形用户界面(GUI)设计器,将自动生成并生成组件的嵌套声明。尤其是在与其他Swing组件结合使用时,如JTextField、JButton等。

使用示例:

JFrame frame = new JFrame("GroupLayout Example");

JLabel label1 = new JLabel("Name:");
JTextField textField1 = new JTextField();
JLabel label2 = new JLabel("Password:");
JTextField textField2 = new JTextField();

GroupLayout layout = new GroupLayout(frame.getContentPane());
frame.getContentPane().setLayout(layout);

layout.setHorizontalGroup(
	layout.createParallelGroup(GroupLayout.Alignment.LEADING)
	.addGroup(layout.createSequentialGroup()
	    .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
	        .addComponent(label1)
	        .addComponent(label2))
	    .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
	        .addComponent(textField1)
	        .addComponent(textField2)))
);

layout.setVerticalGroup(
	layout.createParallelGroup(GroupLayout.Alignment.LEADING)
	.addGroup(layout.createSequentialGroup()
	    .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
	        .addComponent(label1)
	        .addComponent(textField1))
	    .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
	        .addComponent(label2)
	        .addComponent(textField2)))
);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
总结

SWING提供了丰富的布局管理器,可以支持创建各种复杂的图形用户界面。不同的布局管理器适合不同的场景,需要根据实际需求选择。