Swing (Java)

Swing 是一个为Java设计的GUI工具包。 Swing 是 JAVA基础类 的一部分。 Swing 包括了图形用户界面 (GUI) 器件 如:文本框,按钮,分隔窗格和表。
Swing 提供许多比 AWT 更好的屏幕显示元素。它们用纯 Java 写成,所以同 Java 本身一样可以跨平台运行,这一点不像 AWT 。 它们是 JFC 的一部分。 它们支持可更换的面板和主题(各种操作系统默认的特有主题),然而不是真的使用原生平台提供的设备,而是仅仅在表面上模仿它们。这意味着你可以在任意平台上使用 JAVA 支持的任意面板。 轻量级元件的缺点则是执行速度较慢,优点就是可以在所有平台上采用统一的行为。
Hello Word 程序
Swing程序
HelloWorldSwing.java
import javax.swing.*;
public class HelloWorldSwing {
/**{
* 创建并显示GUI。 出于线程安全的考虑,
* 这个方法在事件调用线程中调用。
*/
private static void createAndShowGUI() {
//Make sure we have nice window decorations.
JFrame.setDefaultLookAndFeelDecorated(true);
//Create and set up the window.
JFrame frame = new JFrame("HelloWorldSwing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Add the ubiquitous "Hello World" label.
JLabel label = new JLabel("Hello World");
frame.getContentPane().add(label);
//Display the window.
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
历史
互联网基础类(IFC)是网景公司最初为Java开发的图形库,第一次发布于1996年12月16日。
在1997年4月2日,太陽公司和网景公司宣称他们要将IFC和其他技术合并形成Java基础类。作为IFC最初提供组件的附加品,Swing引进了一个機制:在不改变大量的程序代码前提下允许程序中每个组件面板的变化。支持可更换面板技术的引入允许Swing组件在模拟原生组件外观的同时又保持了平台独立的优点。
架构
Swing 是一个基于 Java 的跨平台 MVC 框架。使用单线程模式。此框架还在代码结构层和图形渲染层之间插入了一个抽象层。
可扩展性
Swing 使用了高度模块化的架构,可以通过接口的方式使用各种定制框架来扩展 Swing。用户可以通过 Java 的继承机制重写原始的组件来实现自己的代码。[1]
Swing 是一个基于组件的框架,所有的组件都是从 javax.swing.JComponent 类继承来的。Swing 对象通过异步方式发送事件,具有边界属性,并且会响应该组件的一系列方法。Swing 组件是 Java Beans 组件,和 Java Beans 组件架构完全保持一致。
可定制性
Swing 提供了可编程渲染模型,使用户可以对渲染细节进行控制。一般来看,Swing 组件的视觉效果是一些通用元素的组合,比如外框、边距、窗口装饰等等。典型的情况是,用户通过编写代码,指定边框、颜色、背景、透明度等属性来定制一种通用 Swing 组件(如 JTable)。核心组件则会用这些定制的属性来进行绘制。此外,也完全可以制作出非常特殊的 GUI 控件或是高度自定义的视觉效果。
-
Swing 个性化绘制 1
-
Swing 个性化绘制 2
-
Swing 个性化绘制 3
可配置性
Swing 高度基于运行时的机制以及其间接的组合模式使得它可以在运行时响应对其底层设置的改变。例如,一个 Swing 的应用程序能在运行时动态地改变界面。此外,用户还能随时应用他们自己的 Look And Feel。Look And Feel 能够统一地改变当前程序的组件外观,而不用修改任何代码。
同AWT的关系
Java的早期版本以来, 抽象視窗工具包 为用户界面组件提供了平台独立的API。在AWT中,每个组件都由一个原生的等同组件生成和控制,这个原生组件是由当前的图形視窗系统决定的。
与此相对,Swing 组件经常被描述为轻量级的,因为它们不需要操作系统本身所带視窗工具包的原生资源来生成。
Swing API 的大部分是AWT的补充扩展而不是直接的代替。Swing用来绘制轻量级组件的核心渲染功能是由Java2D提供的,这是AWT的一部分。然而,轻量级和重量级组件在同一个应用中使用会导致Z-order不兼容。
同 SWT 的关系
标准器件工具包(SWT) 是一个最初由IBM开发的工具包,现在由Eclipse基金会维护。 SWT的实现同重量级的组件AWT有更多的共同之处。这样的好处是运行开销同所在平台的原生視窗工具包更为接近。
SWT的到来使得Java桌面的开发者们分离为SWT的支持者和Swing的支持者。 在6.0版Java中,Swing的新修补专注于同原生視窗平台的逼真度,这可能会直接解决这个问题。
参考
- Matthew Robinson:Swing, Manning, ISBN 1-930110-88-X
- David M. Geary:Graphic Java 2, Volume 2: Swing, Prentice Hall, ISBN 0-13-079667-0
- James Elliott,Robert Eckstein,Marc Loy,David Wood,Brian Cole:Java Swing, O'Reilly, ISBN 0-596-00408-7
- Kathy Walrath,Mary Campione,Alison Huml,Sharon Zakhour:The JFC Swing Tutorial: A Guide to Constructing GUIs, Addison-Wesley Professional, ISBN 0-201-91467-0
- ^ "LookAndFeel (Java Platform SE 7 )", Oracle Documentation, http://docs.oracle.com/javase/7/docs/api/javax/swing/LookAndFeel.html, 5/26/2012
外部链接
- Swing教程
- The Swing Connection
- JavaDesktop
- Java观感
- ClientJava.com
- Presentation "Swing专家编程:创建优雅的程序,第一部分" by Ben Galbraith
- Presentation "Swing专家编程:创建优雅的程序,第二部分" by Ben Galbraith
- Article "什么叫“Swing很慢?”" by Sermet Yucel
- Article "Java桌面开发" by Andrei Cioroianu
- Article "BlackMamba:一个Swing的实例学习" by Ashwin Jayaprakash
- 有关AWT/Swing的文章
- Citations from CiteSeer
- Swing wiki 包含了最棒的练习、技巧、诀窍以及如何入门