注:原文请参见 sun 官方网站 http://java.sun.com/docs/books/tutorial/uiswing/learn/example1.html。完全业余爱好,水平有限,翻译中有不妥之处请提宝贵意见。欢迎转载,转载请注明作者 左洸 和出处 博客园
例一:第一个 Swing 程序
如果你现在还没有一个 Java 开发运行环境,并且也不知道如何做,请参考《Java环境基本配置》一文。
现在,我们就可以通过一个小的例程对 Swing 程序有一个大体的、直观地了解了,本文仅仅实现了一个最基本的窗体,在后面的文章中,我们会在这个程序的基础上,逐步扩展难度,并介绍更多 Swing 程序的特征。例程代码在这里: HelloWorldSwing.java
下图是程序运行起来后的样子:
下面是 HelloWorldSwing 的完整代码:















































这是我们能创建的最简单的 Swing 程序,他不能完成什么任务,但是他向我们展示了一个 Swing 程序的基本结构:
1.导入需要用到的包 (packages)
2.设置一个顶层容器 (container)
3.显示这个容器
4.确保线程安全
第一行导入了主要的 Swing 包:








提示:


如果希望程序能在点击窗体的关闭按钮 后正常退出,必须加入下面的代码:

版本提示 : 在早期的程序中,没有用到 setDefaultCloseOperation 方法,你可能会看到象下面这样的代码:









How to Make Frames (Main Windows)
在 HelloWorldSwing 中以及我们今后所有例子中都会看到像下面这样的代码:










你可以直接照原样复制到你的程序中,这段代码看起来也许有点怪异,但是它可以确保你的图形用户界面程序线程安全。更多的信息清参考 Concurrency in Swing 下面这一行代码对 frame 的边框和窗口标题进行了装饰,但是它需要运行在 1.4 或者更高的 JDK 版本中,如果你使用早期的版本,你需要注释掉这一行。

除了像 JFrame 这样的顶层容器之外,所有其他的 Swing 组件都继承自 JComponent 类, HelloWorldSwing 中用了 JLabel 就是 JComponent 的子类,他用来显示 Hello World 这两个单词。下面两行代码创建了一个 JLabel 并将它添加 frame 中:需要说明的是 label 被加到 frame 的 content pane 中,而不是直接加到 frame 中。每一个顶层容器都有一个 content pane 用来直接或者间接的容纳其他可视组件(菜单和窗体装饰除外)。
版本提示: 我们预期在1.5版本中可以直接调用顶层容器的 add 方法,而不用再通过 content pane
这些包需要被导入,是因为大部分 Swing 组件 (component) 是以 AWT 为底层构建的,其中包括 AWT 事件模型 (event mode),这个事件模型决定了组件如何响应事件,比如点击按钮或者移动鼠标。在后面的章节中,你可以了解到更多关于事件的介绍 Handling Events.
每一个 Swing 图形用户界面程序至少都有一个顶层 Swing 容器 (container),容器为组件提供图形绘制和事件处理支持。有三个常用的顶层 Swing 容器: JFrame, JDialog, and (for applets) JApplet. 每一个 JFrame 都实现了一个主窗体,每一个 JDialog 都实现了一个二级窗体(从属于另一个窗体),每一个 JApplet 都实现了一个在浏览器中运行的小程序 (applet) 。(更多 JApplet内容 How to Make Applets)
HelloWorldSwing 只用到了一个顶层 Swing 容器 JFrame ,作为 JFrame 创建的一个实例,一个框架 (frame) 就是我们平常所说的一个窗口,在默认情况下,它包括窗体区域、边框、标题、最大化、最小化和关闭按钮。一个有图形用户界面 (GUI) 的程序至少要有一个 frame .
下面的代码创建并了一个 frame , 并进行了设置:
HelloWorldSwing 只需要着一个包,但是在大部分 Swing 程序中,可能还需要导入另外两个 AWT 包: