在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` 来布局,然后根据按钮事件来切换界面。登录按钮和注册按钮的事件处理逻辑需要根据实际情况来编写。