用Swing编写矫捷的图形用户界面[Java编程]
本文“用Swing编写矫捷的图形用户界面[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
不矫捷的图形用户界面会降低利用程序的可用性.当以下现象呈现的时刻,我们普通说这个用户界面反映不矫捷.
不呼应事件的现象;
没有更新的现象;
这些现象在很大程度上与事件的处理办法相关,而在编写Swing利用程序的时刻,我们几近必定要编写办法去呼应鼠标点击按钮,键盘回车等事件.在这些办法中我们要编写一些代码,在运行时去触发一些行动.常见行动包含查找,更新数据库等.在这篇文章中通过对一个实例的解析,介绍了一些基本概念,常见的错误以及提出了一个办理筹划.
event-dispatching thread
我们一定要记着,事件呼应办法的代码都是在event-dispatching thread中履行的,除非你启用另一个线程.
那么,什么是event-dispatching thread呢?单一线程法则:一旦一个Swing组件被实现(realized),全部的有大概影响或依靠于这个组件的状况的代码都应当在event-dispatching thread中被履行.而实现一个组件有两种方法:
对顶层组件调用show(), pack(), 大概setVisible(true);
将一个组件加到一个已经被实现的容器中.
单一线程法则的本源是由于Swing组件库的大部份办法是对多线程不安全的.
为了支持单一线程模子,Swing组件库供应了一个专门来完成这些与Swing组件相关的操作的线程,而这一线程就是event-dispatching thread.我们的事件呼应办法普通都是由这一线程调用的,除非你自己编写代码来调用这些事件呼应办法.在这里初学者常常犯的一个错误就是在事件呼应办法中完成过量的与改正组件没有直接接洽的代码.其最有大概的效果就是招致组件反映迟钝.比方以下呼应按钮事件的代码:
String str = null;
this.textArea.setText("Please wait...");
try {
//do something that is really time consuming
str = "Hello, world!";
Thread.sleep(1000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
this.textArea.setText(str);
履行之后的效果就是按钮仿佛定住了一段时间,直到Done.呈现之后才弹起来.缘由就是Swing组件的更新和事件的呼应都是在event-dispatching thread中完成的,而事件呼应的时刻,event-dispatching thread被事件呼应办法占据,所以组件不会被更新.而直到事件呼应办法退出时才有大概去更新Swing组件.
为了办理这个问题,有人大概会试图通过调用repaint()办法来更新组件:
final String[] str = new String[1];
this.jTextArea1.setText("Please wait...");
this.repaint();
try {
Thread.sleep(1000L);
}catch(InterruptedException e) {
e.printStackTrace();
}
str[0] = "Done.";
jTextArea1.setText(str[0]);
但是这一个办法没有起到预期的作用,按钮仍旧定住一段时间,在察看了repaint()办法的源代码之后就知道缘由了.
PaintEvent e = new PaintEvent(this, PaintEvent.UPDATE,
new Rectangle(x, y, width, height));
Toolkit.getEventQueue().postEvent(e);
以上是“用Swing编写矫捷的图形用户界面[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |