📅  最后修改于: 2023-12-03 15:05:26.736000             🧑  作者: Mango
Swing是一种GUI工具包,它使程序员能够创建Java应用程序中的可视化用户界面。本示例介绍了几种常见的布局方式,可以帮助你更轻松地创建具有吸引力和易于使用的用户界面。
Border布局将容器分成五个区域:北、南、东、西和中间。你可以在每个区域中添加组件,这些组件将根据其位置进行布局。通常,放置在中间区域的组件会自动调整大小以填充可用空间。
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
public class BorderExample extends JFrame {
public BorderExample() {
setTitle("BorderLayout Example");
setSize(300, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
add(new JButton("North"), BorderLayout.NORTH);
add(new JButton("South"), BorderLayout.SOUTH);
add(new JButton("East"), BorderLayout.EAST);
add(new JButton("West"), BorderLayout.WEST);
add(new JButton("Center"), BorderLayout.CENTER);
setVisible(true);
}
public static void main(String[] args) {
new BorderExample();
}
}
以上代码会生成一个具有Border布局的JFrame,包括一个位于中心的按钮以及沿边缘的其他按钮。
Flow布局将组件根据它们的添加顺序从左到右排成一行。如果需要,它会在下一行中继续排列组件。默认情况下,组件是左对齐的,但你可以使用FlowLayout.RIGHT
和FlowLayout.CENTER
来使它们右对齐或居中。
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
public class FlowExample extends JFrame {
public FlowExample() {
setTitle("FlowLayout Example");
setSize(300, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new FlowLayout());
add(new JButton("Button 1"));
add(new JButton("Button 2"));
add(new JButton("Button 3"));
setVisible(true);
}
public static void main(String[] args) {
new FlowExample();
}
}
以上代码会生成一个具有Flow布局的JFrame,其中包括三个排列成一行的按钮。
Grid布局将组件放置在一个网格中,类似于电子表格。你可以通过指定行数和列数来创建网格,也可以让控件自适应父容器的大小。此外,你也可以指定每个单元格的行高和列宽。
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
public class GridExample extends JFrame {
public GridExample() {
setTitle("GridLayout Example");
setSize(300, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new GridLayout(2, 2));
add(new JButton("Button 1"));
add(new JButton("Button 2"));
add(new JButton("Button 3"));
add(new JButton("Button 4"));
setVisible(true);
}
public static void main(String[] args) {
new GridExample();
}
}
以上代码会生成一个具有Grid布局的JFrame,其中包括四个放置在一个2x2网格中的按钮。
Box布局通过添加水平或垂直Box容器来控制组件的布局。Box水平容器将组件排列成一行,而Box垂直容器将组件排列成一列。此外,你还可以使用Box.createHorizontalGlue()
和Box.createVerticalGlue()
添加弹性空间。
import java.awt.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
public class BoxExample extends JFrame {
public BoxExample() {
setTitle("Box Example");
setSize(300, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Box vbox = Box.createVerticalBox();
add(vbox);
vbox.add(new JButton("Button 1"));
vbox.add(new JButton("Button 2"));
vbox.add(Box.createVerticalGlue());
vbox.add(new JButton("Button 3"));
vbox.add(Box.createVerticalStrut(5));
vbox.add(new JButton("Button 4"));
setVisible(true);
}
public static void main(String[] args) {
new BoxExample();
}
}
以上代码会生成一个具有Box布局的JFrame,其中包括四个垂直排列的按钮和一个具有弹性空间和垂直填充的Box容器。
Card布局将组件放置在一个单独的卡片上,只显示其中一个卡片。你可以使用卡片的名称来切换可见的卡片。
import java.awt.CardLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class CardExample extends JFrame {
public CardExample() {
setTitle("CardLayout Example");
setSize(300, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel cards = new JPanel(new CardLayout());
add(cards);
cards.add(new JButton("Card 1"), "1");
cards.add(new JButton("Card 2"), "2");
cards.add(new JButton("Card 3"), "3");
CardLayout cardLayout = (CardLayout) cards.getLayout();
cardLayout.show(cards, "1");
setVisible(true);
}
public static void main(String[] args) {
new CardExample();
}
}
以上代码会生成一个具有Card布局的JFrame,其中包括三个按钮,只显示第一个按钮。
以上这些示例仅是Swing布局的基础知识,当然还有其他更复杂的布局方式,你可以通过参考Java官方文档和其他学习资料来学习更多Swing布局的用法。