外观
窗体类
Swing是Javax提供的一套GUI框架。使用Swing可以开发出窗体程序,使数据可视化。
第一个Swing程序
JFrame是所有窗体类的父类,创建一个窗体有两种方式。第一种方式是在主方法里实例化JFrame对象,然后设置此对象即可;第二种方式就是自定义一个窗体类继承自JFrame类,然后在构造方法里设置属性,再在主方法里创建此对象即可。
JFrame类的构造方法即意义如下:
public JFrame():创建一个无标题的窗体。public JFrame(String title):创建一个标题为title的窗体。
下方的示例代码是使用第二种方式创建窗体的,在日常开发中也是这样使用窗体。
package swing.Dialogs;
import javax.swing.*;
import java.awt.*;
public class DemoJFrame extends JFrame {
private DemoJFrame() {
super("这是一个窗体"); //构造方法 参数是标题
setVisible(true); //设置窗体可见
Container container = getContentPane(); //创建窗体容器,可向容器中添加组件以在窗体中显示组件
JLabel jLabel = new JLabel("这是一个JLabel文本"); //创建文本框
jLabel.setHorizontalAlignment(SwingConstants.CENTER); //设置文本框的位置
container.add(jLabel); //向容器里添加这个文本框
container.setBackground(Color.ORANGE); //设置背景颜色
setSize(400, 200); //设置大小
setLocation(300, 200); //设置位置
//还有可以一起设置位置和大小的方法 即jFrame.setBounds(int x,int y,int width,int height)
//下面演示如何设置窗体的最小大小
Dimension dimension = new Dimension(400, 200); //先创建该对象 参数指定最小长和高
setMinimumSize(dimension); //然后调用此方法即可
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); //设置在程序关闭时结束进程运行
}
public static void main(String[] args) {
new DemoJFrame(); // 创建新窗体
}
}运行结果如下:

一般窗体——JFrame类
JFrame类在上方已经介绍过是所有窗体的父类,它还有以下常用方法,这些方法都可以在继承自它的子类中使用,因此下方的代码将不再说明这些方法的意义。
public void setDefaultCloseOperation(int operation):设置窗体在点击关闭按钮后线程的执行方式,有三个可选值:DO_NOTHING_ON_CLOSE(在WindowConstants中定义):不执行任何操作;要求程序在已注册的WindowListener对象的windowClosing方法中处理该操作。HIDE_ON_CLOSE(在WindowConstants中定义):调用任意已注册的WindowListener对象后自动隐藏该窗体。DISPOSE_ON_CLOSE(在WindowConstants中定义):调用任意已注册WindowListener的对象后自动隐藏并释放该窗体。EXIT_ON_CLOSE(在JFrame中定义):使用Systemexit方法退出应用程序。仅在应用程序中使用。
setTitle(String title):设置窗体标题。public void setLayout(LayoutManager manager):设置窗体的布局方式,在后面会介绍。public Container getContentPane():获取窗体容器。public void setSize(int width, int height):设置窗体的大小。public void setLocation(int x, int y):设置窗体的位置。public void setBounds(int x, int y, int width, int height):设置窗体的大小和位置。public void setVisible(boolean b):设置窗体是否可见。
对话框——JDialog类
对话框相对于窗体来说,最大的区别就是右上角没有最大化按钮。对话框一般用于确认信息、输入信息、提示信息等作用。Java中,使用对话框需要用到JDialog类。JDialog类的构造方法如下:
public JDialog():创建一个没有父窗体、不阻塞父窗体的对话框。public JDialog(Frame owner):创建一个父窗体为owner,不阻塞父窗体的对话框。public JDialog(Frame owner, boolean modal):创建一个父窗体为owner的对话框。若modal参数为True,则对话框阻塞父窗体。public JDialog(Frame owner, String title):创建一个父窗体为owner,标题为title,不阻塞父窗体的对话框。public JDialog(Frame owner, String title, boolean modal):创建一个父窗体为owner,标题为title的对话框。若modal参数为True,则对话框阻塞父窗体。
JDialog的常用方法和JFrame很类似:
setTitle(String title):设置对话框标题。public void setLayout(LayoutManager manager):设置对话框的布局方式,在后面会介绍。public Container getContentPane():获取对话框容器。public void setSize(int width, int height):设置对话框的大小。public void setLocation(int x, int y):设置对话框的位置。public void setBounds(int x, int y, int width, int height):设置对话框的大小和位置。public void setVisible(boolean b):设置对话框是否可见。
示例代码:
在下面的代码中,静态内部类MyJFrame是父窗体,在对话框中,将MyJFrame对象作为参数传入。
package swing.Dialogs;
import javax.swing.*;
import java.awt.*;
//该文件演示如何使用对话框
public class DemoJDialog extends JDialog { //继承对话框
private DemoJDialog(JFrame frame) {
/*
* 第一个参数是父对话框对象
* 第二个参数是对话框标题
* 第三个参数是是否阻塞 true为阻塞
* */
super(frame, "这是一个对话框", true);
setBounds(500, 400, 200, 100); //设置对话框的大小和位置
Container container = getContentPane(); //对话框的容器
container.add(new JLabel("这是一个对话框")); //添加组件
setVisible(true); //最后设置可见
}
public static void main(String[] args) {
new MyJFrame();
}
private static class MyJFrame extends JFrame {
private MyJFrame() {
super("这是一个窗体"); //父窗体对象
setBounds(550, 450, 300, 200); //设置位置和大小
setVisible(true); //设置可见
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); //设置关闭方式
Container container = getContentPane(); //容器
container.setLayout(null); //容器使用绝对布局
JButton jButton = new JButton("弹出对话框"); //按钮
jButton.setBounds(50, 50, 100, 30); //设置按钮位置和大小
jButton.addActionListener(e -> new DemoJDialog(this)); //为按钮添加监听
container.add(jButton);
}
}
}运行结果如下。当点击“弹出对话框”按钮时,会弹出小型对话框。

小型对话框——JOptionalPane类
JOptionalPane类提供了一些静态方法用于显示一些简易的小型对话框:
- 选择对话框:
public static int showConfirmDialog(Component parentComponent,Object message, String title, int optionType):
- parentComponent代表父窗体,和JDialog类似;
- message代表显示在对话框内部的消息;
- title代表对话框标题;
- optionType代表选择类型,有以下几个选项:
DEFAULT_OPTION:只显示确定按钮。YES_NO_OPTION:显示确定和取消两个按钮。YES_NO_CANCEL_OPTION:显示确定、取消和返回三个按钮。OK_CANCEL_OPTION:显示确定和返回两个按钮。
该方法会返回一个整型值,代表选择的选项索引。如optionType选择YES_NO_OPTION,则在点击确定按钮后返回0,点击取消按钮后返回1,点击右上角的关闭按钮时返回-1。
- 信息对话框:
public static void showMessageDialog(Component parentComponent,Object message, String title, int messageType):
参数和返回值与第一个对话框的参数意义类似。
- 输入对话框:
public static String showInputDialog(Component parentComponent,Object message, String title, int messageType):参数与第一个对话框类似,但是此对话框多了一个输入框,返回值变成了String类型,即对话框的输入内容。
- 自定义对话框:
public static int showOptionDialog(Component parentComponent,Object message, String title, int optionType, int messageType, Icon icon, Object[] options, Object initialValue):
- messageType代表信息风格,可选值有ERROR_MESSAGE、INFORMATION_MESSAGE、WARNING_MESSAGE、QUESTION_MESSAGE或PLAIN_MESSAGE;
- icon代表图标;
- options代表选项,为对象数组;
- initialValue:默认选中的对象。
返回值与选择对话框类似,返回的是对象数组的索引。
下面代码用于显示四种小型对话框:
import javax.swing.*;
public class Main {
public static void main(String[] args) {
JOptionPane.showConfirmDialog(null, "Confirm", "Title", JOptionPane.OK_CANCEL_OPTION);
JOptionPane.showMessageDialog(null, "Message", "Title", JOptionPane.INFORMATION_MESSAGE);
JOptionPane.showInputDialog(null, "Confirm", "Title", JOptionPane.PLAIN_MESSAGE);
JOptionPane.showOptionDialog(null, "Option", "Title", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, null, new String[]{"选项一", "选项二"}, null);
}
}