在swing的窗口里面,即jframe里面,进行关闭窗口动作,如果事先不在代码中设置好,则默认是把窗口设成
setVisable(false)
,程序还是
依然运行
着,继续占用内存,所以如果不小心,越调试则会发现内存占用率越高,机子越来越卡。
一般的,如果没有特殊要求,只需要这样让该窗口对象调用
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
则当我们关闭窗口时,
程序结束运行
。
但是,如果有特殊要求,如关闭之前要调用一些方法,则可以这样:让该窗口对象调用
addWindowListener(new WindowAdapter());
方法,并重载方法内容,就像下面的代码那样。
addWindowListener(new WindowListener() {
@Override
public void windowOpened(WindowEvent e) {
@Override
public void windowClosing(WindowEvent e) {
// 此处加入操作动作
@Override
public void windowClosed(WindowEvent e) {
@Override
public void windowIconified(WindowEvent e) {
@Override
public void windowDeiconified(WindowEvent e) {
@Override
public void windowActivated(WindowEvent e) {
@Override
public void windowDeactivated(WindowEvent e) {
在swing的窗口里面,即jframe里面,进行关闭窗口动作,如果事先不在代码中设置好,则默认是把窗口设成setVisable(false),程序还是依然运行着,继续占用内存,所以如果不小心,越调试则会发现内存占用率越高,机子越来越卡。 一般的,如果没有特殊要求,只需要这样让该窗口对象调用setDefaultCloseOperation(JFrame.EXIT_ON_CL...
设置 Eclipse 13
下载依赖的 JAR 文件并在 Eclipse 的 classpath 中定义这种依赖性 15
创建 to-do 列表:基本的 Swing 和 Spring 应用程序设置 17
创建 MainFrame、Launcher 和 ToDo 类 17
创建 Spring app-context.xml bean 定义文件 19
运行应用程序 20
定义 bean 属性 21
创建 to-do 列表:创建一个可重用组件并在表中显示数据 23
创建一个可重用的面板 23
将 bean 组合在一起 24
添加一个表并重用这个面板 26
定义表模型 28
显示列表中的项 29
创建 to-do 列表:完成 —— 按钮和监听程序 31
创建按钮和监听程序 32
组合按钮和监听程序 35
Spring Rich Client Project 37
Spring Rich Client Project 概述 37
结束语 38
(二) 适用于各类Swing应用的通用数据验证模块 39
项目创建好后,加入类库: 41
然后写一个persistence bean: 41
Java代码 41
我称这个类为HibernateValidationUI,代码如下: 43
Java代码 43
类中用到的Java2DIconFactory代码如下: 47
Java代码 47
Factory类 49
Java代码 49
最后,我们可以编写一个Demo application来看看效果如何,代码如下: 51
Java代码 51
总结: 55
(三) 对JTree从创建到使用详解 56
(四) JTree的使用方法 57
JTreeDemo.java源程序 57
经验汇总 60
1. 初始化 60
2. 三个经常使用的取值函数 60
3. 根据node得到path: 60
4. 根据Path展开到该节点 60
5. 根据path设定该节点选定 61
6. 选中节点的方法 61
7. 滚动到可见位置 61
8. 给JTree添加右键弹出菜单 61
9. 关于JTree的展开 61
10. 如何遍历JTree 62
(五) JTree右键菜单实现编辑、添加、删除节点 63
Test.java源代码 63
(六) 功能齐全的JTree例子 66
TreeEditTest.java源代码 66
(七) JTree控件的使用 70
构造函数: 70
TreeModel接口 70
DefaultTreeModel缺省版本 71
TreeNode接口 71
TreeExpansionListener接口 71
TreeCellRenderer 72
例子: 73
(八) 如何为JTree添加右键菜单? 75
(九) 如何使JTextArea随着窗体的变化自动调整大小 76
TextAreaTest源代码 76
(十) JAVA swing编程JTree实现系统目录 77
FileTree1.java源代码 77
(十一) Java Swing中的JTree模型 85
Swing.tree包中的主要类名称实现 85
1. 构建树模型 86
2. 树结点 86
树结构详细类图 86
2.1 TreeNode接口 86
2.2 MutableTreeNode接口 87
2.3 DefaultMutableTreeNode类 88
3. 编辑树 88
3.1获得结点路径 88
3.2编辑结点 88
3.3视图显示 89
4. 查找树 89
5. 绘制结点 90
(十二) JTree鼠标左键的双击事件选用那个监听器 91
MouseDemo.java源代码 92
(十三) JTree 92
JTree的构造函数: 93
JTreeDefaultDemo.java源代码 93
(十四) JTree 应用 96
Frame1.java源代码 96
MyDefaultTreeCellRenderer.java源代码 98
(十五) JTree控件 100
树和节点的基本概念 100
有关树JTree的类和接口 100
代码实例:构建一棵树 101
相关语句解释 101
(十六) JTree应用示例——文件路径 103
AnimatedIconTreeExample.java源代码 103
//内部类NodeImageObserver.java源代码 105
//IconNodeRenderer.java源代码 106
//IconNode.java源代码 107
(十七) Swing 学习笔记 108
Swing API 包括18个公共包: 108
例程1.1 HelloWorldSwing.java 109
例程2.2 HelloWorldJFrame.java 110
(十八) 动态加载文件树的java程序 111
FileSystemTree.java源代码 112
//内部类 TreeWillExpandListenerImp.java 114
(十九) 向 Java 应用程序伸出援助之手——用 JavaHelp 2.0 构建下一个 Java 应用程序的帮助系统 115
入门 116
使用 HelpSet 117
HelpSet 数据文件 118
helpset 文件 118
maps 部分 119
view 部分 119
presentation 部分 120
implementation 部分 121
map 文件 121
导航文件 121
TOC 122
Index 122
Glossary 123
Favorites 123
主题文件 123
在 Java 应用程序中调用 JavaHelp 124
自定义外观 125
配置图标 125
基于文字的标签还是基于图像的标签? 125
要工具栏还是不要工具栏? 125
设置字体 126
使用展示窗口 127
<object> 标签 128
四种 activator 129
添加内容敏感的帮助 130
窗口级帮助 131
字段级帮助 131
屏幕级帮助 133
添加嵌入帮助 135
添加搜索功能 136
停用词 137
自定义停用词列表 137
合并 helpset 138
静态和动态合并 139
添加轻量级组件 141
基于服务器的帮助 144
设置 144
JavaHelp 服务器 bean 144
JavaScript 文件 145
JSP 文件 145
测试服务器端帮助 148
结束语 149
一、去掉整个标题栏
在1.4以上的JDK中,只需要调用this.setUndecorated(false)即可不显示标题栏,调用之后最大化、最小化以及关闭按钮将不显示,需要自己实现这些功能,下例为去掉标题栏之后自己实现最大化、最小化、关闭的例子:
* To change this license header, choose License Headers in Project Pro
addWindowListener();
我们添加了窗口监听之后就可以通过窗口监听器器捕捉到窗口事件,就可重写不同窗口状态下的方法,这个时候不同情况下我们就会执行不同的功能
我们的窗口事件的触发有很多种状态,我们的窗口监听器中提供了对应这些状态触发的方法
这里我们举几种常用的方法来讲解:
因为我们的窗口监听事件使用的情况并不是很多,尤其是很多例如关闭窗口的操作我们的JFrame类
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import javax.swing.JFrame;
//WindowListener 窗体事件监听
public class TestWindo
//JDialog,用来被弹出,默认就有关闭事件
public class DialogDemo {
public static void main(String[] args) {
new Dialog1();
//主窗口
class Dialog1 extends JFrame{
public Dialog1(){
this.setVisible(true);
this.setBounds(100,100,
import java.awt.event.*;
public class LoginAndRegister extends JFrame implements ActionListener {
// 登录界面组件
JLabel loginLabel = new JLabel("用户名:");
JTextField loginText = new JTextField(20);
JLabel passwordLabel = new JLabel("密码:");
JPasswordField passwordText = new JPasswordField(20);
JButton loginButton = new JButton("登录");
JButton registerButton = new JButton("注册");
JPanel loginPanel = new JPanel();
// 注册界面组件
JLabel registerLabel = new JLabel("请填写注册信息:");
JLabel registerUserLabel = new JLabel("用户名:");
JTextField registerUserText = new JTextField(20);
JLabel registerPasswordLabel = new JLabel("密码:");
JPasswordField registerPasswordText = new JPasswordField(20);
JLabel registerConfirmPasswordLabel = new JLabel("确认密码:");
JPasswordField registerConfirmPasswordText = new JPasswordField(20);
JButton confirmButton = new JButton("确认");
JButton cancelButton = new JButton("取消");
JPanel registerPanel = new JPanel();
public LoginAndRegister() {
super("登录/注册");
// 设置组件大小和布局
setSize(400, 250);
loginPanel.setLayout(new GridLayout(3, 2));
registerPanel.setLayout(new GridLayout(5, 2));
// 添加登录界面组件
loginPanel.add(loginLabel);
loginPanel.add(loginText);
loginPanel.add(passwordLabel);
loginPanel.add(passwordText);
loginPanel.add(loginButton);
loginPanel.add(registerButton);
add(loginPanel);
// 添加注册界面组件
registerPanel.add(registerLabel);
registerPanel.add(new JLabel(""));
registerPanel.add(registerUserLabel);
registerPanel.add(registerUserText);
registerPanel.add(registerPasswordLabel);
registerPanel.add(registerPasswordText);
registerPanel.add(registerConfirmPasswordLabel);
registerPanel.add(registerConfirmPasswordText);
registerPanel.add(confirmButton);
registerPanel.add(cancelButton);
// 监听按钮事件
loginButton.addActionListener(this);
registerButton.addActionListener(this);
confirmButton.addActionListener(this);
cancelButton.addActionListener(this);
// 设置窗口居中显示
setLocationRelativeTo(null);
setVisible(true);
public void actionPerformed(ActionEvent e) {
if (e.getSource() == loginButton) {
// 处理登录按钮事件
String username = loginText.getText();
String password = new String(passwordText.getPassword());
// TODO: 处理登录逻辑
} else if (e.getSource() == registerButton) {
// 切换到注册界面
getContentPane().remove(loginPanel);
getContentPane().add(registerPanel);
getContentPane().validate();
} else if (e.getSource() == confirmButton) {
// 处理注册按钮事件
String username = registerUserText.getText();
String password = new String(registerPasswordText.getPassword());
String confirmPassword = new String(registerConfirmPasswordText.getPassword());
// TODO: 处理注册逻辑
} else if (e.getSource() == cancelButton) {
// 切换到登录界面
getContentPane().remove(registerPanel);
getContentPane().add(loginPanel);
getContentPane().validate();
public static void main(String[] args) {
new LoginAndRegister();
以上代码中,`LoginAndRegister` 类继承自 `JFrame`,实现了 `ActionListener` 接口,用于监听按钮事件。登录界面和注册界面都用了 `JPanel` 来布局,然后根据按钮事件来切换界面。登录按钮和注册按钮的事件处理逻辑需要根据实际情况来编写。