java界面编程(1) ------ Swing基础
来源:互联网 发布:天涯和知乎哪个实用 编辑:程序博客网 时间:2024/05/22 16:38
本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020
最近想学下java的界面编程,在此记录下。
大多数的Swing应用都被构建在基础的JFrame内部,JFrame在你作用的任何操作系统中都可以创建视窗应用。
看如下一个最简单的JFrame例子:
JFrame frame = new JFrame("Hello Swing");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(300, 100);frame.setVisible(true);这样就创建了一个带标题的视窗,其中,setDefaultCloseOperation()告诉JFrame当用记执行关闭操作时应该做些什么。EXIT_ON_CLOSE常量告诉它要退出程序。而如果没有这个调用,默认的行为是什么都不做,因此应用将不会关闭。setSize()以像素为单位设置视窗的大小。JFrame默认是不显示的,所以需要设置setVisible(true),才能显示在屏幕上。效果如下图所示:
下面,给该视窗添加一个标签,主要代码如下:
JLabel label = new JLabel("A Label");frame.add(label);try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}label.setText("Hi,this is a different");这里面的TimeUnit.SECONDS.sleep(1)指的是过1秒钟后执行下面的操作,即重新设置JLabel显示的文字。效果如下:
上述是直接在Main()线程执行UI事件更新屏幕,但这并不是一种好的想法,Swing有它自己的专用线程来接收UI事件并更新屏幕,如果从其他线程着手对屏幕时进行操作,那么就可能会产生冲突和死锁。所以其他线程包括main()线程,应该通过Swing事件分发线程提交要执行的任务。可以通过将任务提交给SwingUtilities.invokeLater()来实现。
如果我们将这种方式应用于面的例子,那么代码如下:
final JLabel label = new JLabel("A Label");frame.add(label);TimeUnit.SECONDS.sleep(1);SwingUtilities.invokeLater(new Runnable() {@Overridepublic void run() {label.setText("Hi,this is a different");}});
如上述代码,不用直接操作JLabel,取而代之的是,提交一个runnable,因此也就不会产生冲突。
既然,Swing有它自己专用的线程来接收UI事件,那么,我们也不应该直接在Main()线程中操作JFrame,因此,我们将JFrame的操作也统一用Swing专用的线程来实现,则上述例子就变成:
public class test {private static JLabel label;private static JFrame frame;private static void InitJFrame(){frame = new JFrame("Hello Swing");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(300, 100);frame.setVisible(true);label = new JLabel("A Label");frame.add(label);} /** * @param args * @throws InterruptedException */public static void main(String[] args) throws InterruptedException {SwingUtilities.invokeLater(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubInitJFrame();}});TimeUnit.SECONDS.sleep(1);SwingUtilities.invokeLater(new Runnable() {@Overridepublic void run() {label.setText("Hi,this is a different");}});}}当然了,因为创建JFrame有两种方式,一种是new JFrame(),另一种就是直接继承JFrame,上面的完整代码用的是第一种方法,第二方法完整代码如下:
public class SwingTest extends JFrame{private static JLabel label;private static SwingTest st;public SwingTest() {super("Hello Swing");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setSize(300, 100);setVisible(true);label = new JLabel("A Label");add(label);}/** * @param args * @throws InterruptedException */public static void main(String[] args) throws InterruptedException {SwingUtilities.invokeLater(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubst = new SwingTest();}});TimeUnit.SECONDS.sleep(1);SwingUtilities.invokeLater(new Runnable() {@Overridepublic void run() {label.setText("Hi,this is a different");}});}}这里要注意一点,对sleep()的调用不能在构造器的内部,如果放在内部,JLabel的初始文本就永远都不会出现。这主要是因为构造器在sleep()调用完毕和新的标签插入之前不会结束。
0 0
- java界面编程(1) ------ Swing基础
- Java Swing界面编程(1)
- 学习java界面编程swing
- java基础 ---Swing事件编程
- Java Swing界面编程(12)---JPanel布局
- Java Swing界面编程(13)---JSpiltPane
- Java Swing界面编程(14)---JTabbedPane
- Java Swing界面编程(15)---JScrollPane
- Java Swing界面编程(16)---JToggleButton
- Java Swing界面编程(31)---菜单栏:JMenu
- java界面编程(4) ------ Swing事件模型
- Java Swing界面编程(31)---菜单栏:JMenu
- Java Swing图形化用户界面编程
- java基础学习——Swing图形化用户界面编程
- [Java]Swing基础编程【1】基本组件的使用
- swing 界面编程
- swing界面编程记录
- [Java]Swing基础编程【3】内部类
- oracle误删除恢复操作
- CDockablePane 不能右边停靠
- linux vim颜色的设置
- linux learn
- Java方法参数太多怎么办—Part 1—自定义类型
- java界面编程(1) ------ Swing基础
- 将本地文件上传至数据库(并且打印出日志)
- 远程连接mysql数据库,服务器为window系统
- 惆怅的人生,淡淡的忧伤
- poj 1611-The Suspects(并查集)
- SkipList跳表基本原理
- web学习路线图
- sqoop常用命令
- js 判断是手机请求还是pc请求