图形用户接口
1、Swing概述
- Swing是一种轻量级的组件,它由Java语言开发,可以通过使用简洁的代码、灵活的功能和模块化的组件来创建优雅的用户界面
- Swing组建的继承关系
2、Swing顶级容器
JFrame
- JFrame是Swing最常见的一个组件,它是一个独立存在的顶级容器(也叫窗口),所以它不能放在其他的容器之中
import javax.swing.*;
public class JFrameTest {
public static void showJrame() {
//创建并且设置顶级窗口
JFrame frame = new JFrame("JFrameTest");
//设置关闭窗口的默认操作
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置窗口的大小
frame.setSize(500,400);
//展示窗口
frame.setVisible(true);
}
public static void main(String[] args) {
//调用窗口程序
SwingUtilities.invokeLater(JFrameTest::showJrame);
}
}
JDialog
- JDialog是Swing的另外一个顶级容器,通常用来表示对话框窗口,并且JDialog对话框可分为两种:模态对话框和非模态对话框,对话框是模态或者非模态,可以在创建JDialog对象时为构造方法传入参数来设置,也可以在创建JDialog对象后调用它的setModal()方法来进行设置。
- 常见的构造方法
import javax.swing.*;
public class JDialogTest {
public static void showJDialog(){
//创建一个JFrame串口
JFrame frame = new JFrame("JFrame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.setSize(500,400);
//设置JFrame居中对齐
frame.setLocationRelativeTo(null);
//创建一个属于frame的模态的JDialog窗口
JDialog dialog = new JDialog(frame,true);
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setSize(300,200);
dialog.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(JDialogTest::showJDialog);
}
}
3、布局管理器
BorderLayout
- BorderLayout(边界布局管理器)是一种较为复杂的布局方式,它将容器划分为五个区域,分别是页头(PAGE_START)、页尾(PAGE_END)、行首(LINE_START)、行尾(LINE_END)、中部(CENTER)。组件可以被放置在这五个区域中的任意一个位置。
import javax.swing.*;
import java.awt.*;
public class BorderLayoutTest {
public static void showBorderLayout() {
//创建一个名为BorderLayout的顶级窗口
JFrame frame = new JFrame("BorderLayout");
//设置其布局管理器为BorderLayout
frame.setLayout(new BorderLayout());
frame.setSize(500, 300);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
//创建按钮组件放到BorderLayout的五个地方上
frame.add(new JButton("按钮1"), BorderLayout.PAGE_START);
frame.add(new JButton("按钮2"), BorderLayout.PAGE_END);
frame.add(new JButton("按钮3"), BorderLayout.LINE_START);
frame.add(new JButton("按钮4"), BorderLayout.CENTER);
frame.add(new JButton("按钮5"), BorderLayout.LINE_END);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(BorderLayoutTest::showBorderLayout);
}
}
- 效果图
FlowLayout(流式布局管理器)
- 是最简单的布局管理器,在这种布局下,容器会将组件按照添加顺序从左向右放置,当到达容器的边界时,会自动将组件放到下一行的开始位置。这些组件可以按左对齐、居中对齐(默认方式)或右对齐的方式排列。
- FlowLayout的构造方法
import javax.swing.*;
import java.awt.*;
public class FlowLayoutTest {
public static void showFlowLayout(){
//定义一个名为FlowLayout的顶级窗口
JFrame frame = new JFrame("FlowLayout");
//设置布局管理器为FlowLayout,且对齐方式为左对齐,水平间距为20,垂直间距为30
frame.setLayout(new FlowLayout(FlowLayout.LEFT,20,30));
frame.setVisible(true);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500,400);
//向容器添加组件
for (int i = 0;i<5;i++){
frame.add(new JButton("添加第"+(i+1)+"个按钮"));
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(FlowLayoutTest::showFlowLayout);
}
}
- 效果图
GridLayout
- GridLayout(网格布局管理器)使用纵横线将容器分成n行m列大小相等的网格,每个网格中可以添加一个组件。
添加到容器中的组件会从左向右、从上向下依次填充到网格中。
与FlowLayout不同的是,放置在GridLayout布局管理器中的组件将自动占据网格的整个区域 - 常见的构造方法
import javax.swing.*;
import java.awt.*;
public class GridLayoutTest {
public static void showGridLayout(){
//创建一个名为GridLayout的·1顶级窗口
JFrame frame = new JFrame("GridLayout");
//设置布局管理器为三行三列的GridLayout
frame.setLayout(new GridLayout(3,3));
frame.setSize(500, 300);
frame.setLocationRelativeTo(null