0%

JPanel(面板)学习笔记

为了完成实验,强行学习GUI。 

JPanel,面板。JPanel 是在开发中使用频率非常高的一般轻量级面板容器组件。 

JPanel 常用构造方法:

1
2
3
4
5
// 创建默认使用流式布局的面板  
JPanel()

// 创建指定布局管理器的面板
JPanel(LayoutManager layout)

代码实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package com.xiets.swing;

import javax.swing.*;
import java.awt.*;

public class Main {

public static void main(String[] args) {
JFrame jf = new JFrame("用户登录");
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

// 第 1 个 JPanel, 使用默认的浮动布局
JPanel panel01 = new JPanel();
panel01.add(new JLabel("用户名"));
panel01.add(new JTextField(10));

// 第 2 个 JPanel, 使用默认的浮动布局
JPanel panel02 = new JPanel();
panel02.add(new JLabel("密 码"));
panel02.add(new JPasswordField(10));

// 第 3 个 JPanel, 使用浮动布局, 并且容器内组件居中显示
JPanel panel03 = new JPanel(new FlowLayout(FlowLayout.CENTER));
panel03.add(new JButton("登录"));
panel03.add(new JButton("注册"));

// 创建一个垂直盒子容器, 把上面 3 个 JPanel 串起来作为内容面板添加到窗口
Box vBox = Box.createVerticalBox();
vBox.add(panel01);
vBox.add(panel02);
vBox.add(panel03);

jf.setContentPane(vBox);

jf.pack();
jf.setLocationRelativeTo(null);
jf.setVisible(true);
}

}

结果展示

其中函数的解释:

  • setDefaultCloseOperation(int operation):设置用户在此窗体上发起 “close” 时默认执行的操作。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
方法中的参数解释如下:

 1.为“0”或DO_NOTHING_ON_CLOSE:
(在 WindowConstants 中定义):不执行任何操作;要求程序在已注册的WindowListener 对象的 windowClosing 方法中处理该操作。
比如实例代码中更改为f.setDefaultCloseOperation(f. DO_NOTHING_ON_CLOSE);或者f.setDefaultCloseOperation(0),可以发现窗口无法关闭。


 2.为“1”或HIDE_ON_CLOSE:
调用任意已注册的 WindowListener 对象后自动隐藏该窗体。此时没有关闭程序,只是将程序界面隐藏了。可以打开任务管理器,可以看到一个叫“java.exe”的进程(如果调试运行了多个java程序,则会看到多个“java.exe”的进程),如果此时用EditPlus测试程序,会发现当单击窗口的关闭按钮关闭窗口后,却无法再次对程序进行调试,因为程序线程没有关闭,在任务管理器中关闭java.exe(如果有多个“java.exe”的进程,则先都关闭掉,再来测试该问题)基础后,EditPlus才可以重新编译改程序。


3.为“2”或DISPOSE_ON_CLOSE:
调用任意已注册 WindowListener 的对象后自动隐藏并释放该窗体。但继续运行应用程序,释放了窗体中占用的资源。

 4.为“3”EXIT_ON_CLOSE(在 JFrame 中定义):
使用 System exit 方法退出应用程序。仅在应用程序中使用。结束了应用程序。


PS:默认情况下,该值被设置为 HIDE_ON_CLOSE。

当注释掉实例中的f.setDefaultCloseOperation(f.EXIT_ON_CLOSE)语句时,起到的效果和f.setDefaultCloseOperation(f. HIDE_ON_CLOSE)或者f.setDefaultCloseOperation(1)一样。