Swing中的组件:面板组件、文本组件、标签组件、按钮组件、下拉框组件。
一、面板组件
Swing组件中除了JFrame和JDialog这样的顶级容器,还提供了一些面板组件,面板组件不能单独存在,只能放置在顶级窗口容器中。最常见的面板组件有Jpanel和JScrollPane。
1、JPanel
JPanel面板组件是一个无边框,不能被移动、放大、缩小或关闭的面板,它的默认布局管理器是FlowLayout,也可以使用JPanel带参数的构造函数JPanel(LayoutManager layout)或setLayout()成员方法设置JPanel布局管理器。
JPanel大多从父类(如Container)继承过来。
2、JScrollPane
是一个带有滚动条的面板,面板上只能添加一个组件,如果想添加多个组件,应该先将这多个组件添加到某个组件中,然后再将这个组件添加到JScrollPane中。
常用构造方法如下:
方法声明****功能描述JScrollPane()创建一个空的JScrollPane面板JScrollPane(Component view)创建一个显示指定组件的JScrollPane面板,一旦组件内容超过视图大小就会显示水平或垂直滚动条。JScrollPane(Component view,int vsbPolicy,int hsbPolicy)创建一个显示指定容器,并具有指定滚动条策略的JScrollPane,参数vsbPolicy和hsbPolicy分别表示垂直滚动条策略和水平滚动条策略。
如果在构造方法中没有指定显示组件和滚动条策略,可以调用成员方法设置:
方法声明****功能描述void setHorizontalBatPolicy(int policy)指定水平滚动条策略,即水平滚动条何时显示在滚动面板上。
void setVerticalBarPolicy(int policy)
指定垂直滚动条策略,即垂直滚动条何时显示在滚动面板上。
void setViewportView(Component view)
设置在滚动面板显示的组件。
可以用常量属性设置不同的滚动策略,如下:
方法声明****功能描述VERTICAL_SCROLLBAR_AS_NEEDED
当填充的组件视图超过客户端窗口大
小时,自动显示水平和竖直滚动条(JscrollPane组件的默认值)。
HORIZONTAL_SCROLLBAR_AS_NEEDEDVERTICAL_SCROLLBAR_ALWAYS
无论填充的组件视图大小,始终显示水平和竖直滚动条。
HORIZONTAL_SCROLLBAR_ALWAYSVERTICAL_SCROLLBAR_NEVER
无论填充的组件视图大小,始终不显示水平和竖直滚动条。
HORIZONTAL_SCROLLBAR_NEVER
3、面板组件使用示例:
1 import java.awt.*;
2 import javax.swing.*;
3 public class Example11 {
4 private static void createAndShowGUI() {
5 // 1、创建一个JFrame容器窗口
6 JFrame f = new JFrame("PanelDemo");
7 f.setLayout(new BorderLayout());
8 f.setSize(350, 200);
9 f.setLocation(300, 200);
10 f.setVisible(true);
11 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
12 // 2、创建JScrollPane滚动面板组件
13 JScrollPane scrollPane = new JScrollPane();
14 // 设置水平滚动条策略--滚动条需要时显示
15 scrollPane.setHorizontalScrollBarPolicy
16 (ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
17 // 设置垂直滚动条策略--滚动条一直显示
18 scrollPane.setVerticalScrollBarPolicy
19 (ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
20 // 定义一个JPanel面板组件,流式布局管理器
21 JPanel panel = new JPanel();
22 // 在JPanel面板中添加四个按钮
23 panel.add(new JButton("按钮1"));
24 panel.add(new JButton("按钮2"));
25 panel.add(new JButton("按钮3"));
26 panel.add(new JButton("按钮4"));
27 // 设置JPanel面板在滚动面板JScrollPane中显示
28 scrollPane.setViewportView(panel);
29 // 向JFrame容器窗口中添加JScrollPane滚动面板组件
30 f.add(scrollPane, BorderLayout.CENTER);
31 }
32 public static void main(String[] args) {
33 // 使用SwingUtilities工具类调用createAndShowGUI()方法并显示GUI程序
34 SwingUtilities.invokeLater(Example11::createAndShowGUI);
35 }
36 }
二、文本组件
用于接收用户输入的信息,包括文本框(JTextField)、文本域(JTextArea)等,文本组件都有一个共同父类JTextComponent。JTextComponent类是一个抽象类,它提供了文本组件常用的方法。
方法声明
功能描述
String getText()
返回文本组件中所有的文本内容
String getSelectedText()
返回文本组件中选定的文本内容
void selectAll()
在文本组件中选中所有内容
void setEditable()
设置文本组件为可编辑或者不可编辑状态
void setText(String text)
设置文本组件的内容
void replaceSelection(String content)
用给定的内容替换当前选定的内容
1、JTextField
文本框,只能接收单行文本的输入,常用构造方法:
方法声明
功能描述
JTextField()
创建一个空的文本框,初始字符串为null
JTextFiled(int columns)
创建一个具有指定列数的文本框,初始字符串为null
JTextField(String text)
创建一个显示指定初始字符串的文本框
JTextField(String text,int column)
创建一个具有指定列数、并显示指定初始字符串的文本框
JTextField有一个子类JPasswordField,表示密码框,文本框中不显示用户输入的真是信息。
2、JTextArea
文本域,能接收多行文本的输入,使用构造方法创建对象时可以设定区域的行数、列数。:
方法声明
功能描述
JTextArea()
创建一个空的文本域
JTextArea(String text)
创建显示指定初始字符串的文本域
JTextArea(int rows,int columns)
创建具有指定行和列的空文本域
JTextArea(String text,int rows,int columns)
创建显示指定初始文本并指定了行列的文本域
3、使用示例
1 import java.awt.*;
2 import javax.swing.*;
3 public class Example12 {
4 private static void createAndShowGUI() {
5 // 创建一个JFrame聊天窗口
6 JFrame f = new JFrame("聊天窗口");
7 f.setLayout(new BorderLayout());
8 f.setSize(400, 300);
9 f.setLocation(300, 200);
10 f.setVisible(true);
11 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
12 // 创建一个JTextArea文本域,用来显示多行聊天信息
13 JTextArea showArea = new JTextArea(12, 34);
14 // 创建一个JScrollPane滚动面板组件,将JTextArea文本域作为其显示组件
15 JScrollPane scrollPane = new JScrollPane(showArea);
16 showArea.setEditable(false); // 设置文本域不可编辑
17 // 创建一个JTextField文本框,用来输入单行聊天信息
18 JTextField inputField = new JTextField(20);
19 JButton btn = new JButton("发送");
20 // 为按钮添加监听事件
21 btn.addActionListener(e -> {
22 String content = inputField.getText();
23 // 判断输入的信息是否为空
24 if (content != null && !content.trim().equals("")) {
25 // 如果不为空,将输入的文本追加到到聊天窗口
26 showArea.append("本人输入信息:" + content + "\n");
27 } else {
28 // 如果为空,提示聊天信息不能为空
29 showArea.append("聊天信息不能为空!!!" + "\n");
30 }
31 inputField.setText(""); // 将输入的文本域内容置为空
32 });
33 // 创建一个JPanel面板组件
34 JPanel panel = new JPanel();
35 JLabel label = new JLabel("聊天信息"); // 创建一个标签
36 panel.add(label); // 将标签组件添加到JPanel面板
37 panel.add(inputField); // 将文本框添加到JPanel面板
38 panel.add(btn); // 将按钮添加到JPanel面板
39 // 向JFrame聊天窗口的顶部和尾部分别加入面板组件JScrollPane和JPanel
40 f.add(scrollPane, BorderLayout.PAGE_START);
41 f.add(panel, BorderLayout.PAGE_END);
42 }
43 public static void main(String[] args) {
44 // 使用SwingUtilities工具类调用createAndShowGUI()方法并显示GUI程序
45 SwingUtilities.invokeLater(Example12::createAndShowGUI);
46 }
47 }
运行结果:
三、标签组件
除了有用于输入功能的文本组件外,Swing还提供了用于仅供展示的标签组件,常用的Swing标签组件是JLabel,可以显示文本、图像,还可以设置标签内容的垂直和水平对齐方式。
构造方法:
方法声明
功能描述
**JLabel() **
创建无标题的JLabel实例
**JLabel(Icon image) **
创建具有指定图像的JLabel实例
**JLabel(Icon image, int **
**horizontalAlignment) **
创建具有指定图像和水平对齐方式的JLabel实例
JLabel**(String text) **
创建具有指定文本的JLabel实例
JLabel**(String text, Icon icon, **
int**horizontalAlignment) **
创建具有指定文本、图像和水平对齐方式的 JLabel 实例
**JLabel(String text, **
**int horizontalAlignment) **
创建具有指定文本和水平对齐方式的JLabel实例
使用示例:
1 import java.awt.*;
2 import javax.swing.*;
3 public class Example13 {
4 private static void createAndShowGUI() {
5 // 1、创建一个JFrame容器窗口
6 JFrame f = new JFrame("JFrame窗口");
7 f.setLayout(new BorderLayout());
8 f.setSize(300, 200);
9 f.setLocation(300, 200);
10 f.setVisible(true);
11 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
12 // 2、创建一个JLabel标签组件,用来展示图片
13 JLabel label1 = new JLabel();
14 // 2.1、创建一个ImageIcon图标组件,并加入JLabel中
15 ImageIcon icon = new ImageIcon("FruitStore.jpg");
16 Image img = icon.getImage();
17 // 2.2、用于设置图片大小尺寸
18 img = img.getScaledInstance(300, 150, Image.SCALE_DEFAULT);
19 icon.setImage(img);
20 label1.setIcon(icon);
21 // 3、创建一个页尾JPanel面板,并加入JLabel标签组件
22 JPanel panel = new JPanel();
23 JLabel label2 = new JLabel("欢迎进入水果超市",JLabel.CENTER);
24 panel.add(label2);
25 // 4、向JFrame聊天窗口容器的顶部和尾部分别加入JLabel和JPanel组件
26 f.add(label1, BorderLayout.PAGE_START);
27 f.add(panel, BorderLayout.PAGE_END);
28 }
29 public static void main(String[] args) {
30 // 使用SwingUtilities工具类调用createAndShowGUI()方法并显示GUI程序
31 SwingUtilities.invokeLater(Example13::createAndShowGUI);
32 }
33 }
四、按钮组件
常用的按钮组件有JButton、JCheckBox、JRadioButton,它们都是抽象类AbstractButton类的直接或间接子类。常用方法:
方法声明
功能描述
Icon getIcon()
获取按钮的图标
void setIcon(Icon icon)
设置按钮的图标
String getText()
获取按钮的文本
void setText(String text)
设置按钮的文本
void setEnable(boolean b)
设置按钮是否可用
boolean setSelected(boolean b)
设置按钮是否为选中状态
boolean isSelected()
返回按钮的状态(true为选中,反之为未选中)
1、JCheckBox
复选框组件,有选中和未选中两种状态
构造方法:
方法声明
功能描述
JCheckBox()
创建一个没有文本信息,初始状态未被选中的复选框
JCheckBox(String text)
创建一个带有文本信息,初始状态未被选定的复选框
JCheckBox(String text,boolean selected)
创建一个带有文本信息,并指定初始状态(选中/未选中)的复选框
调用setText(String text)方法设置复选框文本信息,setSelected(boolean b)设置复选框状态,isSelected()判断复选框是否被选中。
使用示例:
1 import java.awt.*;
2 import java.awt.event.*;
3 import javax.swing.*;
4 public class Example14 {
5 private static void createAndShowGUI() {
6 // 1、创建一个JFrame容器窗口
7 JFrame f = new JFrame("JFrame窗口");
8 f.setLayout(new BorderLayout());
9 f.setSize(300, 300);
10 f.setLocation(300, 200);
11 f.setVisible(true);
12 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
13 // 2、创建一个JLabel标签组件,标签文本居中对齐
14 JLabel label = new JLabel("Hello World!", JLabel.CENTER);
15 label.setFont(new Font("宋体", Font.PLAIN, 20));
16 // 3、创建一个JPanel面板组件
17 JPanel panel = new JPanel();
18 // 3.1、创建两个JCheckBox复选框,并添加到JPanel组件中
19 JCheckBox italic = new JCheckBox("ITALIC");
20 JCheckBox bold = new JCheckBox("BOLD");
21 // 3.2、为复选框定义ActionListener监听器
22 ActionListener listener = new ActionListener() {
23 public void actionPerformed(ActionEvent e) {
24 int mode = 0;
25 if (bold.isSelected())
26 mode += Font.BOLD;
27 if (italic.isSelected())
28 mode += Font.ITALIC;
29 label.setFont(new Font("宋体", mode, 20));
30 }
31 };
32 // 3.3、为两个复选框添加监听器
33 italic.addActionListener(listener);
34 bold.addActionListener(listener);
35 // 3.4、在JPanel面板添加复选框
36 panel.add(italic);
37 panel.add(bold);
38 // 4、向JFrame窗口容器中加入居中的JLabel标签组件和页尾的JPanel面板组件
39 f.add(label);
40 f.add(panel, BorderLayout.PAGE_END);
41 }
42 public static void main(String[] args) {
43 // 使用SwingUtilities工具类调用createAndShowGUI()方法并显示GUI程序
44 SwingUtilities.invokeLater(Example14::createAndShowGUI);
45 }
46 }
运行结果:
2、JRadionButton
单选按钮组件,只能选中一个。
常用构造方法:
方法声明
功能描述
JRadioButton** ()**
创建一个没有文本信息、初始状态未被选中的单选框
JRadioButton (String text)
创建一个带有文本信息、初始状态未被选定的单选框
JRadioButton (String text,boolean selected)
创建一个具有文本信息,并指定初始状态(选中/未选中)的单选框。
使用示例:
1 import java.awt.*;
2 import java.awt.event.*;
3 import javax.swing.*;
4 public class Example15 {
5 private static void createAndShowGUI() {
6 // 1、创建一个JFrame容器窗口
7 JFrame f = new JFrame("JFrame窗口");
8 f.setLayout(new BorderLayout());
9 f.setSize(300, 300);
10 f.setLocation(300, 200);
11 f.setVisible(true);
12 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
13 // 2、创建一个JLabel标签组件,标签文本居中对齐
14 JLabel label = new JLabel("Hello World!",JLabel.CENTER);
15 label.setFont(new Font("宋体", Font.PLAIN, 20));
16 // 3、创建一个页尾的JPanel面板组件,来封装ButtonGroup组件
17 JPanel panel = new JPanel();
18 // 3.1、创建一个ButtonGroup按钮组件
19 ButtonGroup group = new ButtonGroup();
20 // 3.2、创建二个JRadioButton单选按钮组件
21 JRadioButton italic = new JRadioButton("ITALIC");
22 JRadioButton bold = new JRadioButton("BOLD");
23 // 3.3、将二个JRadioButton单选按钮组件加入到同一个ButtonGroup组中
24 group.add(italic);
25 group.add(bold);
26 // 3.4、为二个JRadioButton单选按钮组件注册动作监听器
27 ActionListener listener = new ActionListener() {
28 public void actionPerformed(ActionEvent e) {
29 int mode = 0;
30 if (bold.isSelected())
31 mode += Font.BOLD;
32 if (italic.isSelected())
33 mode += Font.ITALIC;
34 label.setFont(new Font("宋体", mode, 20));
35 }
36 };
37 // 3.5、为二个单选框添加监听器
38 italic.addActionListener(listener);
39 bold.addActionListener(listener);
40 // 3.6、将二个JRadioButton单选按钮组件加入到页尾的JPanel组件中
41 panel.add(italic);
42 panel.add(bold);
43 // 4、向JFrame容器中分别加入居中的JLabel标签组件和页尾的JPanel面板组件
44 f.add(label);
45 f.add(panel, BorderLayout.PAGE_END);
46 }
47 public static void main(String[] args) {
48 // 使用SwingUtilities工具类调用createAndShowGUI()方法显示GUI程序
49 SwingUtilities.invokeLater(Example15::createAndShowGUI);
50 }
51 }
五、下拉框组件
JComboBox组件被称为下拉框或组合框,它将所有选项折叠在一起,默认显示的是第一个添加的选项,当用户单击下拉框时,会出现下拉式的选择列表,用户可以从中选择其中一项显示。
常用构造方法:
方法声明
功能描述
JComboBox()
创建一个没有可选项的下拉框
JComboBox(Object[] items)
创建一个下拉框,将Object数组中的元素作为下拉框的下拉列表选项
JComboBox(Vector items)
创建一个下拉框,将Vector集合中的元素作为下拉框的下拉列表选项
JComboBox成员方法:
方法声明
功能描述
void addItem(Object anObject)
为下拉框添加选项
void insertItemAt(Object anObject,int index)
在指定的索引处插入选项
Objct getItemAt(int index)
返回指定索引处选项,第一个选项的索引为0
int**getItemCount()**
返回下拉框中选项的数目
Object getSelectedItem()
返回当前所选项
void removeAllItems()
删除下拉框中所有的选项
void removeItem(Object object)
从下拉框中删除指定选项
void removeItemAt(int index)
移除指定索引处的选项
void setEditable(boolean aFlag)
设置下拉框的选项是否可编辑,aFlag为true则可编辑,反之则不可编辑
使用示例:
1 import java.awt.*;
2 import javax.swing.*;
3 public class Example16 {
4 private static void createAndShowGUI() {
5 // 1、创建一个JFrame容器窗口
6 JFrame f = new JFrame("JFrame窗口");
7 f.setLayout(new BorderLayout());
8 f.setSize(350, 200);
9 f.setLocation(300, 200);
10 f.setVisible(true);
11 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
12 // 2、创建一个页头的JPanel面板,用来封装JComboBox下拉框组件
13 JPanel panel = new JPanel();
14 // 2.1、创建JComboBox下拉框组件
15 JComboBox<String> comboBox = new JComboBox<>();
16 // 2.2、为下拉框添加选项
17 comboBox.addItem("请选择城市");
18 comboBox.addItem("北京");
19 comboBox.addItem("天津");
20 comboBox.addItem("南京");
21 comboBox.addItem("上海");
22 // 2.3、创建JTextField单行文本框组件,用来展示用户选择项
23 JTextField textField = new JTextField(20);
24 // 2.4、为JComboBox下拉框组件注册动作监听器
25 comboBox.addActionListener(e -> {
26 String item = (String) comboBox.getSelectedItem();
27 if ("请选择城市".equals(item)) {
28 textField.setText("");
29 } else {
30 textField.setText("您选择的城市是:" + item);
31 }
32 });
33 // 2.5、将JComboBox组件和JTextField组件加入JPanel面板组件中
34 panel.add(comboBox);
35 panel.add(textField);
36 // 3、向JFrame窗口容器中加入页头的JPanel面板组件
37 f.add(panel, BorderLayout.PAGE_START);
38 }
39 public static void main(String[] args) {
40 // 使用SwingUtilities工具类调用createAndShowGUI()方法并显示GUI程序
41 SwingUtilities.invokeLater(Example16::createAndShowGUI);
42 }
43 }
运行结果:
1、下拉式菜单
JmenuBar(菜单栏)、Jmenu(菜单)、JmenuItem(菜单项)
(1)JMenuBar
表示一个水平的菜单栏,可以放在容器的任何位置,通常会使用顶级容器的setJMenuBar()方法将菜单栏放置在顶级容器的顶部。
创建菜单栏,只需使用new创建JMenubar对象,通过调用add(JMenu c)方法添加JMeny菜单。
(2)JMenu
表示一个菜单,用来整合管理菜单项,使用构造函数JMenu(String text)创建菜单
常用方法:
方法声明
功能描述
JMenuItem add(JMenuItem menuItem)
将菜单项添加到菜单末尾,返回此菜单项
void addSeparator()
将分隔符添加到菜单的末尾
JMenuItem**getItem(intpos****)**
返回指定索引处的菜单项,第一个菜单项的索引为0
int getItemCount()
返回菜单上的项数,菜单项和分隔符都计算在内
JMenuItem insert(JmenuItem
** menuItem,int pos)**
在指定索引处插入菜单项
void insertSeparator(int pos)
在指定索引处插入分隔符
void remove(int pos)
从菜单中移除指定索引处的菜单项
void remove(JMenuItem menuItem)
从菜单中移除指定的菜单项
void removeAll()
从菜单中移除所有的菜单项
(3)JMenuItem
下拉式菜单最基本的组件,使用JMenumItem(String text)为菜单项指定文本内容。
JMenuItem继承AbstractButton,因此可以看成是一个按钮,可以调用setText(String text)方法和setIcon()方法设置文本和图标。
(4)下拉式菜单使用示例:
1 import javax.swing.*;
2 public class Example17 {
3 private static void createAndShowGUI() {
4 // 1、创建一个JFrame容器窗口
5 JFrame f = new JFrame("JFrame窗口");
6 f.setSize(350, 300);
7 f.setLocation(300, 200);
8 f.setVisible(true);
9 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
10 // 2、创建菜单栏组件JMenuBar
11 JMenuBar menuBar = new JMenuBar();
12 // 2.1、创建2个JMenu菜单组件,并加入JMenuBar中
13 JMenu menu1 = new JMenu("文件(F)");
14 JMenu menu2 = new JMenu("帮助(H)");
15 menuBar.add(menu1);
16 menuBar.add(menu2);
17 // 2.2、创建2个JMenuItem菜单项组件,并加入JMenu中
18 JMenuItem item1 = new JMenuItem("新建(N)");
19 JMenuItem item2 = new JMenuItem("退出(X)");
20 menu1.add(item1);
21 menu1.addSeparator(); // 设置分隔符
22 menu1.add(item2);
23 // 2.3、分别创建2个JMenuItem菜单项监听器
24 item1.addActionListener(e -> {
25 // 创建一个JDialog弹窗
26 JDialog dialog = new JDialog(f,"无标题",true);
27 dialog.setSize(200, 100);
28 dialog.setLocation(300, 200);
29 dialog.setVisible(true);
30 dialog.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
31 });
32 item2.addActionListener(e -> System.exit(0));
33 // 3、向JFrame窗口容器中加入JMenuBar菜单组件
34 f.setJMenuBar(menuBar);
35 }
36 public static void main(String[] args) {
37 // 使用SwingUtilities工具类调用createAndShowGUI()方法并显示GUI程序
38 SwingUtilities.invokeLater(Example17::createAndShowGUI);
39 }
40 }
运行结果:
2、弹出式菜单
用JPopupMenu实现,都通过调用add()方法添加JMenuItem菜单项,但JpopupMenu默认是不可见的,如果想要显示出来,必须调用它的**show(Component invoker,int x,int y)**方法。show()方法中的参数invoker用于显示JPopupMenu菜单的参考组件,x和y表示invoker组件坐标,表示的是以JPopupMenu菜单左上角为原点的坐标。
使用示例:
1 import java.awt.event.*;
2 import javax.swing.*;
3 public class Example18 {
4 private static void createAndShowGUI() {
5 // 1、创建一个JFrame容器窗口
6 JFrame f = new JFrame("JFrame窗口");
7 f.setSize(300, 200);
8 f.setLocation(300, 200);
9 f.setVisible(true);
10 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
11 // 2、创建JPopupMenu弹出式菜单
12 JPopupMenu popupMenu = new JPopupMenu();
13 // 2.1、创建两个JMenuItem菜单项,并加入到JPopupMenu组件中
14 JMenuItem item1 = new JMenuItem("查看");
15 JMenuItem item2 = new JMenuItem("刷新");
16 popupMenu.add(item1);
17 popupMenu.addSeparator();
18 popupMenu.add(item2);
19 // 3、为JFrame窗口添加鼠标事件监听器
20 f.addMouseListener(new MouseAdapter() {
21 public void mouseClicked(MouseEvent e) {
22 // 如果单击的是鼠标右键,显示JPopupMenu菜单
23 if (e.getButton() == MouseEvent.BUTTON3) {
24 popupMenu.show(e.getComponent(), e.getX(), e.getY());
25 }
26 }
27 });
28 }
29 public static void main(String[] args) {
30 // 使用SwingUtilities工具类调用createAndShowGUI()方法并显示GUI程序
31 SwingUtilities.invokeLater(Example18::createAndShowGUI);
32 }
33 }
运行结果:
版权归原作者 Shewyoo 所有, 如有侵权,请联系我们删除。