Swing应用程序框架的学习

开发 后端
本文介绍Swing应用程序框架的学习,以及介绍学Swing应用程序框架估计主要要了解以下几点。

最近为一个东西写个界面,觉得用SWT&JFace比较麻烦,再说JFace我也没完全会,就干脆用Swing了。不过发现Swing和SWT貌似还是有比较多的不同的。所以,仔细看了看。下面是收集的资料。中文的资料多半都是翻译的Introduction To Swing Application Framework的,但是翻译的很烂。推荐把这篇文章放到最后读,因为这篇文章写的不是很好,属于不懂的人看了不太懂,懂的人看了就更懂的那种,简单来说细节写的不清楚,盲点很多。

学Swing应用程序框架估计主要要了解以下几点:

1. 应用程序框架提供了什么功能,如何帮助用户管理应用程序的各个方面的。(想必下面这个图已经说明的很清楚了,大家只要照着图,按图索骥,把几个类之间的关系和功能搞明白就行了)

2. Swing中的工作线程(这个主要就是要把工作线程和事件派发处理线程之间相互独立出来 ,以免造成界面假死的情况。再就是这么做了之后,就涉及到两个线程之间的通信问题。主要就是搞清楚如何写工作线程,以及工作线程如何和事件派发处理线程相互交互的)

3.再就是一些高级玩意了,如何把bean和某个组件进行绑定,将界面操作省时省力的直接反映到DB中。


Swing Tutorial      Swing教程
http://java.sun.com/docs/books/tutorial/uiswing/
(主要介绍了Swing的基本构成,基础的基础,知道组件,容器和布局,以及Swing中的并发的可以跳过)

Using the swing application framework     如何使用Swing应用程序框架
http://java.sun.com/developer/technicalArticles/javase/swingappfr/
(一篇快速入门的好教程)

Improve Application Performance with SwingWorker In J2SE6     如何利用SwingWorker改进程序性能
http://java.sun.com/developer/technicalArticles/javase/swingworker/index.html
(Swing中的工作线程的问题)

Swing & Thread     Swing和线程
http://java.sun.com/products/jfc/tsc/articles/threads/threads1.html
(还是工作线程的问题)

Introduction to swing application framework     Swing应用程序框架介绍
https://appframework.dev.java.net/intro/index.html
(这篇文章还是介绍,主要解决快速入门中某些没提到的盲点的,也是一篇总览性的文章)

补充:

关于SwingTask&Task

Task是Swing应用程序框架对SwingTask的一个补充之后的子类,除了添加点无关紧要的方法,没多大变化,所以下面对这个表示工作的类做一个无差别性的叙述。

在Swing里面主要有三类线程,

一类启动其他两类线程,所以又叫做初始线程

一类构造UI并且处理UI上面产生的点击等事件,所以又叫做事件派发线程,Event Dispatcher Thread,简称EDT。这类线程必须通过SwingUtilities里面的invokeLater以及变种方法来启动。

还有一类就是后台工作线程。

为了避免直接在EDT上面处理耗时的任务,卡在那里,影响了UI的重画,造成界面假死,所以要用后台的工作线程来处理这类耗时的任务。完成了后台耗时的任务之后,还需要把结果返回给UI线程,然后让其在界面上面显示。为此,设计了一个Task类,这个类包含了3个重要的三个方法。

doInBackground方法 所有耗时的工作都在这个方法内完成,这个方法将运行在工作线程上。完成后返回结果值,Task类自动帮你把结果存好。

get方法 这个方法就用来取得结果的。一般在done方法里面使用这个get方法

done方法 当doInBackground完成任务,返回结果,并且被Task类自动存好后,就会在EDT线程上面调用这个方法,你可以在这个方法里面用get方法获得处理的结果,然后将其显示到UI上面。

问题来了,当你集成了Task,写好了这3个方法,如何启动这个后台任务呢?
那就需要你在其他两个线程中,调用Task的execute方法了,当这个方法调用之后,Task类就自动建立一个工作线程,然后把 doInBackground放在这个线程里面跑,跑完了这个工作线程就结束了。然后,就自动切到EDT线程上,掉用done方法,done方法中利用 get取得结果,显示到UI上面。(如何放到UI上面显示呢,这就要靠你在new一个Task的时候,把UI的引用传进来了,或者你就干脆建成一个UI类的静态内部类,又叫嵌入类来着吧,你就省掉传UI的引用的麻烦了)

在Swing应用程序框架中,你只需要实现一个返回Task类型的事件处理方法,框架会自动调用Task的execute方法,你就省去手动调用的麻烦了。

还有个问题,Task类是如何把done放到EDT上面执行的呢? 这个我还没弄明白。希望深入了解的人指导一下。

【编辑推荐】

  1. 浅谈Swing中的Look&Feel
  2. Swing组件大全随着Java风潮一起来席卷国内
  3. 全面比较Swing与SWT
  4. Swing程序中调用JavaFX代码
  5. SWT和Swing代码的区别
责任编辑:佚名 来源: csdn
相关推荐

2009-07-16 17:09:02

Swing应用程序

2009-07-17 16:09:29

Swing桌面应用程序

2009-07-17 10:42:06

Swing应用程序处理函数

2009-07-10 17:24:07

Swing应用程序

2009-07-14 11:08:42

WebRendererSwing应用程序

2009-04-12 08:45:32

Symbian诺基亚移动OS

2011-04-15 17:33:39

SWINGAWT

2020-10-22 10:05:26

HarmonyOS应用程序框架

2020-11-05 11:47:52

HarmonyOS

2009-07-15 15:35:59

Swing程序Swing性能

2019-02-11 09:35:04

Python应用程序Tornado

2011-05-31 15:41:00

Cocoa TouchCocoaiOS

2011-09-05 10:27:02

Sencha Touc手机应用Android

2018-12-03 08:25:24

2022-02-23 15:33:19

前端框架开发Web

2011-12-03 20:25:53

2010-11-23 08:39:41

EnyowebOS 2.0WebOS

2020-10-10 10:30:31

JavaScript开发技术

2023-06-13 13:38:00

FlaskPython

2015-04-14 09:26:52

WebWeb应用程序框架
点赞
收藏

51CTO技术栈公众号