Swing笔记 1. UIManager , Look and Feel , SwingUtilities
2008-06-25 10:58
731 查看
Swing笔记(1) - 最简单的swing程序
JFrame , UIManager , Look and Feel , SwingUtilities ,javaw进程的结束
一、尝试了一下,一个最简单的Swing程序需要9行:
该程序运行结果如下(win XP,使用经典外观):
回头看代码,是否可以再精简
1. import语句不能省,要不然程序不认识JFrame;
2. 构造JFrame对象(f),不能省,这时我们要显示的窗口;
3. 设置f的大小,如果不设置,大小为0,等于看不到;
4. setVisible,这个方法将窗口显示出来
5. 当然,可以删除空行,或将代码压缩到一行,不过那样就不好读了。
二、响应窗口关闭事件
上述最小程序是不完整的。表现如下:
1、如果在命令行使用java taskman启动程序,关闭窗口之后,命令行的程序并不结束,必须使用CTRL-C来中止程序执行;
2、如果使用javaw taskman启动,关闭窗口之后,系统中对应的javaw进程不能自动结束,必须使用任务管理器找到进程,手动中止,如果没有察觉到这个现象,反复启动这样的程序后,会发现,虽然所有的窗口都已经关闭,但系统中的javaw进程却会越来越多,最终威胁系统的稳定运行;
为了解决这个问题,我们的最简程序还需要增加一条语句:
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) ;
增加这条语句以后的代码如下:
在关闭这个程序产生的窗口时,java将调用System.exit(0),相关的java或javaw进程就会同时结束了。
三、窗口的外观一致性
响应了窗口关闭事件以后,我们的swing程序对操作系统而言已经是一个“行事检点”的模范程序了,然而看起来窗口的样子还是怪怪的,尤其是在窗口中添加了控件以后,总觉得边框和窗口主面板不协调,查了查文档,知道可以通过UIMagager解决这个问题,即在程序一开始使用如下三条语句:
修改后的程序外观如下:
代码如下:
四、swing的java线程安全要求
统一了外观以后,再与swing tutorials对照, 发现还有一个关键的东西:SwingUtilities.invokeLater。
查了查资料,发现如果不用这个东西,会有swing线程不安全的问题,使用这个东西后,代码明显复杂了:
在最初看到这种写法的时候,我非常难以理解为什么把程序搞得这么复杂,后来在开发实际的应用时,才对这个问题有了初步的认识。
JFrame , UIManager , Look and Feel , SwingUtilities ,javaw进程的结束
一、尝试了一下,一个最简单的Swing程序需要9行:
import javax.swing.*; public class taskman {<br /> public static void main(String[] args) { JFrame f = new JFrame("任务人II") ; f.setSize(300,200) ; f.setVisible(true) ; } }
该程序运行结果如下(win XP,使用经典外观):
回头看代码,是否可以再精简
1. import语句不能省,要不然程序不认识JFrame;
2. 构造JFrame对象(f),不能省,这时我们要显示的窗口;
3. 设置f的大小,如果不设置,大小为0,等于看不到;
4. setVisible,这个方法将窗口显示出来
5. 当然,可以删除空行,或将代码压缩到一行,不过那样就不好读了。
二、响应窗口关闭事件
上述最小程序是不完整的。表现如下:
1、如果在命令行使用java taskman启动程序,关闭窗口之后,命令行的程序并不结束,必须使用CTRL-C来中止程序执行;
2、如果使用javaw taskman启动,关闭窗口之后,系统中对应的javaw进程不能自动结束,必须使用任务管理器找到进程,手动中止,如果没有察觉到这个现象,反复启动这样的程序后,会发现,虽然所有的窗口都已经关闭,但系统中的javaw进程却会越来越多,最终威胁系统的稳定运行;
为了解决这个问题,我们的最简程序还需要增加一条语句:
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) ;
增加这条语句以后的代码如下:
import javax.swing.*; public class taskman { public static void main(String[] args) { JFrame f = new JFrame("任务人II") ; f.setSize(300,200) ; f.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE) ; f.setVisible(true) ; } }
在关闭这个程序产生的窗口时,java将调用System.exit(0),相关的java或javaw进程就会同时结束了。
三、窗口的外观一致性
响应了窗口关闭事件以后,我们的swing程序对操作系统而言已经是一个“行事检点”的模范程序了,然而看起来窗口的样子还是怪怪的,尤其是在窗口中添加了控件以后,总觉得边框和窗口主面板不协调,查了查文档,知道可以通过UIMagager解决这个问题,即在程序一开始使用如下三条语句:
String lnf = UIManager.getCrossPlatformLookAndFeelClassName() ; UIManager.setLookAndFeel(lnf) ; JFrame.setDefaultLookAndFeelDecorated(true) ;
修改后的程序外观如下:
代码如下:
import javax.swing.*; public class taskman { public static void main(String[] args) throws Exception { String lnf = UIManager .getCrossPlatformLookAndFeelClassName() ; UIManager.setLookAndFeel(lnf) ; JFrame.setDefaultLookAndFeelDecorated(true) ; JFrame f = new JFrame("任务人II") ; f.setSize(300,200) ; f.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE) ; f.setVisible(true) ; } }
四、swing的java线程安全要求
统一了外观以后,再与swing tutorials对照, 发现还有一个关键的东西:SwingUtilities.invokeLater。
查了查资料,发现如果不用这个东西,会有swing线程不安全的问题,使用这个东西后,代码明显复杂了:
import javax.swing.*; public class taskman { public static void main(String[] args) throws Exception { String lnf = UIManager .getCrossPlatformLookAndFeelClassName() ; UIManager.setLookAndFeel(lnf) ; JFrame.setDefaultLookAndFeelDecorated(true) ; SwingUtilities.invokeLater(new Runnable(){ public void run() { make_ui() ; } }) ; } static void make_ui() { JFrame f = new JFrame("任务人II") ; f.setSize(300,200) ; f.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE) ; f.setVisible(true) ; } }
在最初看到这种写法的时候,我非常难以理解为什么把程序搞得这么复杂,后来在开发实际的应用时,才对这个问题有了初步的认识。
相关文章推荐
- Swing:LookAndFeel 教程第一篇——手把手教你写出自己的 LookAndFeel
- Java swing皮肤(look and feel)大全
- (swing读书笔记)Swing Look And Feel(1)
- Java Swing LookAndFeel Demo
- Java swing皮肤(look and feel)大全
- [原创]Swing技巧.5:运行中重设LookAndFeel
- UIManager【NimROD Look And Feel】
- (swing读书笔记)Swing Look And Feel(2)
- JAVA---LookAndFeel(UIManager)
- Java JFC/Swing Look and Feel 创建于展示
- A Visual Guide to Swing Components (Java Look and Feel)
- 用各种look and feel打造swing界面
- Swing在进行LookAndFeel切换时异常的解决方法
- (swing读书笔记)Swing Look And Feel(3)
- 用各种look and feel打造swing界面
- Java Swing LookAndFeel Demo
- (swing读书笔记)Swing Look And Feel(4)
- JAVASE---LookAndFeel(UIManager)
- Swing用UIManager.setLookAndFee怎么选择界面风格的
- 一款符合当前主流审美的Swing外观(Look and Feel)_测试版发布