浅析Swing组件的规则

开发 后端
本文简单介绍Swing组件的规则,一旦Swing组件被具现化,所有可能影响或依赖于组件状态的代码都应该在事件派发线程中执行。

Swing的规则是:
一旦Swing组件被具现化(realized),所有可能影响或依赖于组件状态的代码都应该在事件派发线程中执行。

这个规则可能听起来有点吓人,但对许多简单的程序来说,你用不着为线程问题操心。在我们深入如何撰写Swing代码之前,让我们先来定义两个术语:具现化(realized)和事件派发线程(event-dispatchingthread)。

具现化的意思是组建的paint()方法已经或可能会被调用。一个作为顶级窗口的Swing组件当调用以下方法时将被具现化:setVisible(true)、show()或(可能令你惊奇)pack()。当一个窗口被具现化,它包含的所有组件都被具现化。另一个具现化一个组件的方法是将它放入到一个已经具现化的容器中。稍后你会看到一些对组件具现化的例子。

事件派发线程是执行绘制和事件处理的线程。例如,paint()和actionPerformed()方法会自动在事件派发线程中执行。另一个将代码放到事件派发线程中执行的方法是使用SwingUtilities类的invokeLater()方法。
所有可能影响一个已具现化的Swing组件的代码都必须在事件派发线程中执行。但这个规则有一些例外:
◆有些方法是线程安全的:在SwingAPI的文档中,线程安全的方法用以下文字标记:
Thismethodisthreadsafe,althoughmostSwingmethodsarenot.(这个方法是线程安全的,尽管大多数Swing方法都不是。)
◆一个应用程序的GUI常常可以在主线程中构建和显示:下面的典型代码是安全的,只要没有(Swing或其他)组件被具现化:

  1. publicclassMyApplication{  
  2. publicstaticvoidmain(String[]args){  
  3. JFramef=newJFrame("Labels");  
  4. //在这里将各组件  
  5. //加入到主框架……  
  6. f.pack();  
  7. f.show();  
  8. //不要再做任何GUI工作……  
  9. }  

【编辑推荐】

  1. Swing SWT集成框架介绍
  2. 浅析Swing实现MDI的方法
  3. 概述Swing中的JApplet和JFrame
  4. 浅谈Swing中的Metal观感
  5. Swing动态刷新常用代码
责任编辑:佚名 来源: 电子工业出版社
相关推荐

2009-07-17 11:30:44

Swing Image

2009-07-10 10:37:50

Swing Set示例

2009-07-16 09:54:44

LookupEventSwing线程

2009-07-15 10:06:54

Swing实现MDI

2009-07-10 14:20:01

AcceleratorJava Swing

2009-07-15 16:03:26

Swing线程

2009-07-16 17:01:09

Swing字符串

2009-07-15 16:50:07

Swing项目

2009-07-15 13:46:26

Swing体系结构

2009-07-17 16:41:48

actionPerfoSwing

2009-07-10 16:29:32

Swing组件

2009-07-14 17:21:42

Swing组件

2009-07-10 18:06:59

JTree Swing

2009-07-17 12:54:13

2009-07-10 13:20:37

Swing容器组件

2009-07-14 15:12:36

SwingSWT和AWT

2009-07-10 17:24:07

Swing应用程序

2009-07-15 17:33:08

Swing客户端

2009-07-14 14:00:47

iData技术

2012-01-17 17:21:24

JavaSwing
点赞
收藏

51CTO技术栈公众号