1.Swing概述
- Swing是一种轻量级组件,底层一AWT(抽象窗口工具包)为基础。在实际开发中,更多的是使用Swing进行图形用户界面开发。但是Swing并不是AWT的替代品,而是在原有的AWT的基础上进行了补充和改进。
- Swing组件的所有类都继承自Container类,然后根据GUI开发的功能扩展了两个主要分支:容器分支(包括Window窗口和Panel面板)和组件分支。其中,容器分支就是为了实现图形用户界面窗口容器设计的,而组件分支则是为了实现向容器中填充数据、元素以及人际交互组件等功能。
2.Swing顶级容器
JFrame
- 在Swing组件中,最常见的一个容器就是JFrame,它是一个独立存在的顶级容器(也叫窗口),不能放置在其他容器之中,JFrame支持通过窗口所有的基本功能,例如窗口最小化、设定窗口大小等。
package gui;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class Example01 {
private static void creatAndshowGUI() {
//创建并设置JFrame容器窗口
JFrame frame = new JFrame("JFrameTest");
//设置关闭窗口时的默认操作
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置窗口尺寸
frame.setSize(250, 150);
//展示JFrame容器窗口
frame.setVisible(true);
}
public static void main(String[] args) {
//使用SwingUtilities工具类调用creatAndshowGUI()方法显示GUI程序
SwingUtilities.invokeLater(Example01::creatAndshowGUI);
}
}
JDialog
- JDialog是Swing的另外一个顶级容器,通常用来表示对话框窗口。JDialog对话框可分为两种:模态对话框(用户需要等到处理完对话框后才能继续与其他窗口交互)和非模态对话框(允许用户在处理对话框的同时与其他窗口交互)
- 对话框是模态或者是非模态,可以在创建JDialog对象时为构造方法传入参数来设置,也可以在创建JDialog对象后调用它的setModal()方法来进行设置,JDialog常用的构造方法如下
方法声明 | 功能描述 |
---|---|
JDialog(Frame owner) | 构造方法,用来创建一个非模态的对话框,owner为所有对话框所有者(顶级窗口JFrame) |
JDialog(Frame owner,String title) | 构造方法,创建一个具有指定标题的非模态对话框 |
JDialog(Frame owner,boolean modal) | 创建一个指定模式的无标题对话框 |
- 上表列举了JDialog三个常用的构造方法,在这三个构造方法中都需要接收一个Frame类型的对象,表示对话框所有者。第三个构造方法中,参数modal用来指定JDialog窗口是模态还是非模态,如果modal值设置为true,对话框就是模态对话框,反之则是非模态对话框,如果不设置modal的值,其默认值为false,也就是非模态对话框
package gui;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class Example02 {
private static void creatAndshowGUI() {
//创建并设置JFrame容器窗口
JFrame frame = new JFrame("JFrameTest");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(350, 150);
frame.setVisible(true);
//在JFrame窗口基础上创建并设置JDialog容器窗口
JDialog dialog = new JDialog(frame,"JDialog对话框",true);
dialog.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
dialog.setSize(200, 100);
dialog.setVisible(true);
}
public static void main(String[] args) {
//使用SwingUtilities工具类调用creatAndshowGUI()方法显示GUI程序
SwingUtilities.invokeLater(Example02::creatAndshowGUI);
}
}
- 虽然JFrame和JDialog都可创建顶级容器窗口,但JDialog创建的窗口并没有放大和缩小功能。另外,由于创建JDialog容器对象时,设置的模态参数modal为true,所以在操作时,必须先关闭JDialog对话框后才可以与JFrame窗口进行交互
3.布局管理器
Swing组件不能单独存在,必须放置于容器当中,而组件在容器中的位置和尺寸是由布局管理器来决定的。Swing工具在AWT的基础上提供了8种布局管理器,分别为BorderLayout(边界布局管理器)、BoxBagLayout(箱式时布局管理器)、CardLayout(卡片布局管理器)、FlowLayout(流式布局管理器)、GridBagLayout(网格包布局管理器)、GridLayout(网格布局管理器)、GroupLayout(分组布局管理器)、SpringLayout(弹性布局管理器)
BorderLayout
- BorderLayout(边界布局管理器)是一种较为复杂的布局方式,它将容器化分为5个区域,分别是页头(PAGE_START)、页尾(PAGE_END)、行首(LINE_START)、行尾(LINE_END)、中部(CENTER),组件可以被放置在这5个区域中的任意一个位置
- 当向BorderLayout布局管理器的容器中添加组件时,需要使用
add(Component comp, Object constraints)
方法,其中参数comp表示要添加的组件,constraints指定将组件添加到布局中的位置,它是一个Object类型,再传参时可以使用页头(PAGE_START)、页尾(PAGE_END)、行首(LINE_START)、行尾(LINE_END)、中部(CENTER)
设置组件位置
package gui;
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class Example03 {
private static void creatAndShowGUI() {
//创建一个名为BorderLayout的顶级容器窗口
JFrame f = new JFrame("BorderLayout");
//设置窗口中的布局管理器为BorderLayout
f.setLayout(new BorderLayout());
f.setSize(300, 300);
f.setLocation(300, 200);
//下面的代码是创建5个按钮组件
JButton but1 = new JButton("PAGE_START");
JButton but2 = new JButton("PAGE_END");
JButton but3 = new JButton("LINE_START");
JButton but4 = new JButton("LINE_END");
JButton but5 = new JButton("CENTER");
//下面的代码是将创建好的按钮添加到窗体中,并设置按钮所在的区域
f.add(but1,BorderLayout.PAGE_START);
f.add(but2,BorderLayout.PAGE_END);
f.add(but3