第11章Java基础类 DK1.2提供了Java基础类,其中的一部分就是 Swing swing是构筑在AWT上层的一些组件的集 合(为了保证平台独立性,它是用100%的纯Java编写)。本模块介绍了JFC和 Swing图形用户界面的实 现 The Jae programming l G吃t bject- Oriented P ro gramming Yd au Exception Handling wtd想 ponert lter Multith 第一节相关问题 讨论一以下为与本模块内容有关的问题 AWT本身是非常有用的,它是一个新的类集合的一部分。这个新的类集合称为Java基础类 (JFC),它作为一个整体,将GUI提升到了一个新的水平层次。JC究竟是什么,特别地,什 么是 Swing?什么事 Swing可以做但AWT不能? 第二节目标 在完成了本模块的学习后,你应当能够 认识Java基础类的关键特性 描述 com. sun java swing包的关键特性 认识 Swing组件 定义容器和组件,并解释如何联合使用它们来构造一个 Swing gu 编写,编译并运行一个基本的 Swing应用程序 高效地使用诸如 Jframe和 Japplet等顶层容器
104 第11章 Java 基础类 JDK1.2 提供了 Java 基础类,其中的一部分就是 Swing。Swing 是构筑在 AWT 上层的一些组件的集 合(为了保证平台独立性,它是用 100%的纯 Java 编写)。本模块介绍了 JFC 和 Swing 图形用户界面的实 现。 第一节 相关问题 讨论-以下为与本模块内容有关的问题: ⚫ AWT 本身是非常有用的,它是一个新的类集合的一部分。这个新的类集合称为 Java 基础类 (JFC),它作为一个整体,将 GUI 提升到了一个新的水平层次。JFC 究竟是什么,特别地,什 么是 Swing?什么事 Swing 可以做但 AWT 不能? 第二节 目 标 在完成了本模块的学习后,你应当能够: ⚫ 认识 Java 基础类的关键特性 ⚫ 描述 com.sun.java.swing 包的关键特性 ⚫ 认识 Swing 组件 ⚫ 定义容器和组件,并解释如何联合使用它们来构造一个 Swing GUI ⚫ 编写,编译并运行一个基本的 Swing 应用程序 ⚫ 高效地使用诸如 Jframe 和 Japplet 等顶层容器
参考文献 以下参考文献可提供有关本模块论题的其他细节内容: The Java Tutorial,这是 Sun Microsystems的一本在线教材,可以从 htt/liava.sun.com/docs/books/tutorial得到 第三节介绍 介绍 Java基础类包含5个API AWT Java2D Drag drop ● Swing Java基础类是关于GUI组件和服务的完整集合,它大大简化了健壮Java应用程序的开发和实现。 JFC,作为JDK12的一个有机部分,主要包含5个APl:AWT,Java2D, Accessibility,Drag&Drop Swing。它提供了帮助开发人员设计复杂应用程序的一整套应用程序开发包 正如前面那些模块中所讨论的那样,AWT组件为各类Java应用程序提供了多种GUI工具 Java2D是一图形API,它为Java应用程序提供了一套高级的有关二维(2D)图形图像处理的类。 Java2DAPI扩展了 Java. awt和 jamaat, Image类,并提供了丰富的绘图风格,定义复杂图形的机制和精 心调节绘制过程的方法和类。这些API使得独立于平台的图形应用程序的开发更加简便 Accessibility API提供了一套高级工具,用以辅助开发使用非传统输入和输出的应用程序。它提供了 个辅助的技术接口,如:屏幕阅读器,屏幕放大器,听觉文本阅读器(语音处理)等等 Drag&Drop技术提供了Java和本地应用程序之间的互操作性,用来在Java应用程序和不支持Java 技术的应用程序之间交换数据。 FC模块的重点在 Swing。 Swing用来进行基于窗口的应用程序开发,它提供了一套丰富的组件和工 作框架,以指定GUI如何独立于平台地展现其视觉效果。 1131 Swing介绍 Swing介绍 ●可插的外观和感觉 应用程序看上去是与平台有关的 有客户化的 Swing组件 · Swing的体系结构 它是围绕着实现AWT各个部分的API构筑的 大多数组件不象AWT那样使用与平台相关的 实现 Swing提供了一整套GUI组件,为了保证可移植性,它是完全用Java语言编写的。 可插的外观和感觉 可插的外观和感觉使得开发人员可以构建这样的应用程序:它们可以在任何平台上执行,而且看上 去就象是专门为那个特定的平台而开发的。一个在 Windows环境中执行的程序,似乎是专为这个环境而
105 参考文献 以下参考文献可提供有关本模块论题的其他细节内容: ⚫ The Java Tutorial ,这是 Sun Microsystems 的一本在线教材,可以从 http://java.sun.com/docs/books/tutorial 得到。 第三节 介 绍 Java 基础类是关于 GUI 组件和服务的完整集合,它大大简化了健壮 Java 应用程序的开发和实现。 JFC,作为 JDK1.2 的一个有机部分,主要包含 5 个 API:AWT,Java2D,Accessibility,Drag & Drop, Swing。它提供了帮助开发人员设计复杂应用程序的一整套应用程序开发包。 正如前面那些模块中所讨论的那样,AWT 组件为各类 Java 应用程序提供了多种 GUI 工具。 Java2D 是一图形 API,它为 Java 应用程序提供了一套高级的有关二维(2D)图形图像处理的类。 Java2D API 扩展了 java.awt 和 java.awt. image 类,并提供了丰富的绘图风格,定义复杂图形的机制和精 心调节绘制过程的方法和类。这些 API 使得独立于平台的图形应用程序的开发更加简便。 Accessibility API 提供了一套高级工具,用以辅助开发使用非传统输入和输出的应用程序。它提供了 一个辅助的技术接口,如:屏幕阅读器,屏幕放大器,听觉文本阅读器(语音处理)等等。 Drag & Drop 技术提供了 Java 和本地应用程序之间的互操作性,用来在 Java 应用程序和不支持 Java 技术的应用程序之间交换数据。 JFC 模块的重点在 Swing。Swing 用来进行基于窗口的应用程序开发,它提供了一套丰富的组件和工 作框架,以指定 GUI 如何独立于平台地展现其视觉效果。 11.3.1 Swing 介绍 Swing 提供了一整套 GUI 组件,为了保证可移植性,它是完全用 Java 语言编写的。 可插的外观和感觉 可插的外观和感觉使得开发人员可以构建这样的应用程序:它们可以在任何平台上执行,而且看上 去就象是专门为那个特定的平台而开发的。一个在 Windows 环境中执行的程序,似乎是专为这个环境而 介绍 ⚫ Java 基础类包含 5 个 API ⚫ AWT ⚫ Java2D ⚫ Accessibility ⚫ Drag & Drop ⚫ Swing Swing 介绍 ⚫ 可插的外观和感觉 ⚫ 应用程序看上去是与平台有关的 ⚫ 有客户化的 Swing 组件 ⚫ Swing 的体系结构 ⚫ 它是围绕着实现 AWT 各个部分的 API 构筑的 ⚫ 大多数组件不象 AWT 那样使用与平台相关的 实现
开发的;而同样的程序在Unx平台上执行,它的行为又似乎是专为Unix环境开发的 开发人员可以创建自己的客户化Swng组件,带有他们想设计出的任何外观和感觉。这增加了用于 跨平台应用程序和Aplt的可靠性和一致性。一个完整应用程序的GUI可以在运行时刻从一种外观和 感觉切换到另一种 wing的体系结构 与AWT比较, Swing提供了更完整的组件,引入了许多新的特性和能力。 Swing ap是围绕着实现 MT各个部分的API构筑的。这保证了所有早期的AWT组件仍然可以使用。AWT采用了与特定平台 相关的实现,而绝大多数Swng组件却不是这样做的,因此 Swing的外观和感觉是可客户化和可插的 Your Application Swing Components window Dialog Java 2D Frame Drag and Drop ScrollBar Fon t Color Graphics A。 possibility AWT JFC 上图显示了JFC各个部分之间的相互关系。Java2D, Accessibility,Drag&Drop,和 Accessibility API 是AWT和JFC的一部分,但它们不属于 Swing。这是因为,这些组件使用了一些本地代码,而 Swing 却不是这样的 Swing是围绕着一个称为 JComponent的新组件构建的,而 JComponent则由AWT的容器类扩展而 来 Swing的层次结构 下图说明了 Swing组件的层次结构
106 开发的;而同样的程序在 Unix 平台上执行,它的行为又似乎是专为 Unix 环境开发的。 开发人员可以创建自己的客户化 Swing 组件,带有他们想设计出的任何外观和感觉。这增加了用于 跨平台应用程序和 Applet 的可靠性和一致性。一个完整应用程序的 GUI 可以在运行时刻从一种外观和 感觉切换到另一种。 Swing 的体系结构 与 AWT 比较,Swing 提供了更完整的组件,引入了许多新的特性和能力。Swing API 是围绕着实现 AWT 各个部分的 API 构筑的。这保证了所有早期的 AWT 组件仍然可以使用。AWT 采用了与特定平台 相关的实现,而绝大多数 Swing 组件却不是这样做的,因此 Swing 的外观和感觉是可客户化和可插的。 上图显示了 JFC 各个部分之间的相互关系。Java2D,Accessibility,Drag & Drop,和 Accessibility API 是 AWT 和 JFC 的一部分,但它们不属于 Swing。这是因为,这些组件使用了一些本地代码,而 Swing 却不是这样的。 Swing 是围绕着一个称为 JComponent 的新组件构建的,而 JComponent 则由 AWT 的容器类扩展而 来。 Swing 的层次结构 下图说明了 Swing 组件的层次结构:
java.awt, Container co, sun java swing JComponent JTextcomponent JTextArea JTextField PasswordField Htmledite JToggleButton jCheck Box Combobox Button RAdiobUtton Menuitem JRadioButtonMenultem heck BoxMenultem MEnubAr JMenu JScrollBar jScrollPane Slider JProgressBar RootPane jSplitPane TabbedPane Swing guI使用两种类型的类,即GUI类和非GUI支持类。GUI类是可视的,它从 JComponent继 承而来,因此称为“J”类。非GUI类为GUI类提供服务,并执行关键功能:因此它们不产生任何可视 的输出 注- Swing的事件处理类是非GU|类的一例。 wing组件 Swing组件主要为文本处理、按钮、标签、列表、pane、组合框、滚动条、滚动pane、菜单、表格 和树提供了组件。其中一些组件如下所示 Rp e Radio 2 nIng OK JApplet Sclect an Option Monday (?)s Thursday Cance Fray J ComboBox
107 Swing GUI 使用两种类型的类,即 GUI 类和非 GUI 支持类。GUI 类是可视的,它从 JComponent 继 承而来,因此称为“J”类。非 GUI 类为 GUI 类提供服务,并执行关键功能;因此它们不产生任何可视 的输出。 注-Swing 的事件处理类是非 GUI 类的一例。 Swing 组件 Swing 组件主要为文本处理、按钮、标签、列表、pane、组合框、滚动条、滚动 pane、菜单、表格 和树提供了组件。其中一些组件如下所示: JApplet JButton JComboBox JOptionPane
January Label I JList J Label Swing组件(续) First Na. Last Name) Home Search Gu Chi Jeff Linkin JScrollPane J Table D tabs.gif o Tree view D treeview TOoltip JTree 第四节基本的 Swing应用程序 HelloSwing应用程序的输出产生下图所示的窗口: alloWing I am a Swing button Number of button clicks: 4 每次用户点击按钮时,标签就会更新。 11.5.1 HelloSwing
108 JList JLabel Swing 组件(续) JScrollPane JTable JScrollBar JSlider JTooltip JTree 第四节 基本的 Swing 应用程序 HelloSwing 应用程序的输出产生下图所示的窗口: 每次用户点击按钮时,标签就会更新。 11.5.1 HelloSwing
1. import java. awt. 3. import com. sun java swing. 4. import java. awt. accessibility 6.public class HelloSwing implements ActionListener 7. private JFrame j Frame 8. private JLabel jLabel; 9. private JPanel j Panel 10 I1- private Accessible Context accContext 13. private String labelPrefi 14 Number of button clicks 15. private int numClicks =0; 16. 17. public void goo i 19. // Here is how you can set up a particular 20.//look Feel. Not necessary for default 22∥try{ 23. // UIManager. setLook AndFeel( 24. //UIManager. getLookAndFeelO) 25. //) catch(Unsupported LookAndFeelException e)i 26.//System. err println("Couldn,'t use the 27.//default look and feel "+e) 28.∥} 30.j Frame =new J Frame("HelloSwin 31 jLabel -new JLabel(labelPrefix+0"); 33 jButton=new J Button("I am a Swing button!") 35. / /Create a shortcut: make ALT-A be equivalent 36/ to pressing mouse over button (1) 39.jButton. addActionListener(this) Bellowing(续) 2. acc Context= Button. get Accessible ContextO 3. acc Context set Accessible Description( 4. Pressing this button increments " 5. "the number of button clicks")
109 1.import java.awt.*; 2.import java.awt.event.*; 3.import com.sun.java.swing.*; 4.import java.awt.accessibility.*; 5. 6.public class HelloSwing implements ActionListener { 7.private JFrame jFrame; 8.private JLabel jLabel; 9.private JPanel jPanel; 10.private JButton jButton; 11.private AccessibleContext accContext; 12. 13.private String labelPrefix = 14."Number of button clicks: "; 15.private int numClicks = 0; 16. 17.public void go() { 18. 19.// Here is how you can set up a particular 20.// lookAndFeel. Not necessary for default. 21.// 22.// try { 23.// UIManager.setLookAndFeel( 24.// UIManager.getLookAndFeel()); 25.// } catch (UnsupportedLookAndFeelException e) { 26.// System.err.println("Couldn't use the " + 27.// "default look and feel " + e); 28.// } 29. 30.jFrame = new JFrame("HelloSwing"); 31.jLabel = new JLabel(labelPrefix + "0"); 32. 33.jButton = new JButton("I am a Swing button!"); 34. 35.// Create a shortcut: make ALT-A be equivalent 36.// to pressing mouse over button. 37.jButton.setMnemonic('i'); 38. 39.jButton.addActionListener(this); 40. HelloSwing(续) 1.// Add support for accessibility. 2.accContext = jButton.getAccessibleContext(); 3.accContext.setAccessibleDescription( 4."Pressing this button increments " + 5."the number of button clicks");
7.//Set up pane 8.//Give it a border around the edges 9. j Panel=new JPanelo 10. jPanel set Border( 11. BorderFactory create Empty Border( 12.30,30,10,30), 13 14.// Arrange for compts to be in a single column 5.j Panel. setLayout( new GridLayout(O, 1) 16. 17. //Put compts in pane, not in JFrame directly 18. Panel. addgjButton); 19. Panel. addgjLabel) 20.j Frame setContentPane(jPanel) 21 22. / Set up a WindowListener inner class to handle 24. WindowListener wl= new WindowAdapter(i 25. public void window Closing( WindowEvent e)i 26 System. exit(O) 27.} 28}; 29 ]Frame. add windowListener(wl); 30. 31F 32. j Frame set Visible( true); Helloswing(续) 1.∥ Button handling 2. public void action Performed( Action Event e) 3. numClicks++ 4.jLabel set Text(label Prefix numClicks) 7. public static void main( Stringl] args)( 9. Hello Swing hello Swing= new Hello Swing 10.helloSwing goo 11 11.2导入 Swing包 导入 Swing包 选择外观和感觉 ● getLookAndFeelO ●设置窗口容器 JFrame与 Frame相似
110 6. 7.// Set up pane. 8.// Give it a border around the edges. 9.jPanel = new JPanel(); 10.jPanel.setBorder( 11.BorderFactory.createEmptyBorder( 12.30,30,10,30)); 13. 14.// Arrange for compts to be in a single column. 15.jPanel.setLayout(new GridLayout(0, 1)); 16. 17.// Put compts in pane, not in JFrame directly. 18.jPanel.add(jButton); 19.jPanel.add(jLabel); 20.jFrame.setContentPane(jPanel); 21. 22.// Set up a WindowListener inner class to handle 23.// window's quit button. 24.WindowListener wl = new WindowAdapter() { 25.public void windowClosing(WindowEvent e) { 26.System.exit(0); 27.} 28.}; 29.jFrame.addWindowListener(wl); 30. 31.jFrame.pack(); 32.jFrame.setVisible(true); 33.} 34. HelloSwing(续) 1.// Button handling. 2.public void actionPerformed(ActionEvent e) { 3.numClicks++; 4.jLabel.setText(labelPrefix + numClicks); 5.} 6. 7.public static void main(String[] args) { 8. 9.HelloSwing helloSwing = new HelloSwing(); 10.helloSwing.go(); 11.} 12.} 11.4.2 导入 Swing 包 ⚫ 导入 Swing 包 ⚫ 选择外观和感觉 ⚫ getLookAndFeel() ⚫ 设置窗口容器 ⚫ JFrame 与 Frame 相似
语句行 Import com. sun Java swing*装入整个 Swing包,它包括了标准 Swing组件和功能。 选择外观和感觉 Hello Swing的第22-28行给定了应用程序外观和感觉的格式。 getlookAndFeelo方法返回在 Windows环境中的外观和感觉。在运行 Solaris操作系统的机器上,这个方法则返回一个公共桌面环境 (CDE)/ Motif的外观和感觉。因为都是缺省值,所以对本例来说,这些行都不是必需的 1143建立窗口 Swing程序用 JFrame对象实现了它们的窗口。 JFrame类是 AWT Frame类的一个子类。它还加入了 些 Swing所独有的特性。 Hello Swing中,处理 J Frame的代码如下 public HelloSwing( i JPanel jPan jFrame= new JFrame("HelloSwing") jPanel=new JPanelo jFrame setContentPane(j Panel) 这段代码与使用 Frame的代码十分相似。唯一的区别在于,你不能将组件加入到 J frame中。你可 以或者将组件加入到 J Frame的 content pane中,或者提供一个新的 content pane 个 content pane是一个包含除菜单条(如果有的话)外所有框架的可视组件的容器。要获得一个 J Frame的 content pane,可使用 get Content Pane()方法。要设置它的 content pane(如前面本例所示),则 可使用 set ContentPaneo方法。 11.4建立 Swing组件 Swing应用程序基础 建立Swng组件 Hello Swing java示例实例化了4个 Swing组件,这4 个组件是: J frame, J Button, J Label和 JPanel 支持辅助技术 Hello Swing. java示例代码支持辅助技术 accContext =jButton. get Accessible ContextO accContext. set AccessibleDescription Pressing this button increments"+ the number of button clicks. " l11
111 语句行 import com.sun.java.swing.*装入整个 Swing 包,它包括了标准 Swing 组件和功能。 选择外观和感觉 Hello Swing 的第 22-28 行给定了应用程序外观和感觉的格式。getLookAndFeel()方法返回在 Windows 环境中的外观和感觉。在运行 Solaris 操作系统的机器上,这个方法则返回一个公共桌面环境 (CDE)/Motif 的外观和感觉。因为都是缺省值,所以对本例来说,这些行都不是必需的。 11.4.3 建立窗口 Swing 程序用 JFrame 对象实现了它们的窗口。JFrame 类是 AWT Frame 类的一个子类。它还加入了 一些 Swing 所独有的特性。Hello Swing 中,处理 JFrame 的代码如下: public HelloSwing() { JFrame jFrame; JPanel jPanel; ..... jFrame = new JFrame("HelloSwing"); jPanel = new JPanel(); ....... jFrame.setContentPane(jPanel); 这段代码与使用 Frame 的代码十分相似。唯一的区别在于,你不能将组件加入到 JFrame 中。你可 以或者将组件加入到 JFrame 的 content pane 中,或者提供一个新的 content pane。 一个 content pane 是一个包含除菜单条(如果有的话)外所有框架的可视组件的容器。要获得一个 JFrame 的 content pane,可使用 getContentPane()方法。要设置它的 content pane(如前面本例所示),则 可使用 set ContentPane()方法。 11.4.4 建立 Swing 组件 Swing 应用程序基础 ⚫ 建立 Swing 组件 ⚫ Hello Swing.java 示例实例化了 4 个 Swing 组件,这 4 个组件是:JFrame,JButton,JLabel 和 JPanel ⚫ 支持辅助技术 ⚫ Hello Swing.java 示例代码支持辅助技术 accContext = jButton.getAccessibleContext(); accContext.setAccessibleDescription( "Pressing this button increments " + " the number of button clicks.");
Hello swing程序显式地实例化了4个组件: Jframe, J Button, j Label和 JPanel. hello swing用第 33-45行中的代码来初始化 J Button 第33行创建了按钮。第37行将ACI一I键组合设置为快捷键,用来模拟按钮的点击。第39行为点 击注册了一个事件处理器。第41-45行描述了一个按钮,使得辅助技术可以提供有关按钮功能的信息 第49一59行初始化了 J Panel。这些代码创建了 J Panel对象,设置它的边框,并将它的布局管理器设 置为单列地放置 panel的内容。最后,将一个按钮和一个标签加入到 Panel中。 Hello Swing中的 Panel 使用了一个不可见的边框,用来在它周围放入额外的填充。 114.5支持辅助技术 中唯一支持辅助技术的代码是: accContext =j Button. get Accessible Contexto acc Context set Accessible Description( Pressing this button increments"+ the number of button clicks. 下列信息集也可由辅助技术使用 jButton=new J Button("I'm a Swing button! " jLabel =new JLabel(labelPrefix+0"); jLabel set Text(labelPrefix numClicks); 在 J frame, J Button, JLabel和其他所有组件中,都有内建的 Accessibility支持。辅助技术可以很容 易地获得文本,甚至与 特定部分相关的文本。 第五节构造一个 Swing GUI 构造一个 Swing gui 顶层容器( J Frame, JApplet, JDialog,和 J Window) 轻质组件(如 J Button, JPanel和 J Menu) 将 Swing组件加入到与顶层容器相关联的 content pane中 Swing包定义了两种类型的组件 顶层容器( J Frame, JApplet, J Window,和 J Dialog) 轻质组件(其他的J,如 J Button, J Panel和 JMenu 顶层容器定义了可以包含轻质组件的框架。特别地,一个顶层 Swing容器提供了一个区域,轻质组 件可在这个区域中绘制自身。顶层容器是它们对应的重质AWT组件的 Swing子类。这些Swng容器依 靠它们的AWT超类的本地方法与硬件进行适当的交互 通常,每个 Swing组件在其容器层次结构中都应当有一个位于组件上面的顶层 Swing容器。例如 每个包含Swng组件的 Applet都应作为 JApplet(而它自身又是 javaapplet. Applet的一个子类)的子类来 实现。相似地,每个包含 Swing组件的主窗口都应用 J Frame来实现。典型地,如果你在使用 Swing组 件,你将只能使用 Swing组件和 Swing容器。 Swing组件可以加入到一个与顶层容器关联的 content pane中,但绝不能直接加入到顶层容器中 content pane是一个轻质 Swing组件,如 JPanel c 下面是一个典型 Swing程序的GU容器层次结构图,这个程序实现了 个包含2个按钮,一个文本域和一个列表 Jframe a top-level Swing container)
112 Hello Swing 程序显式地实例化了 4 个组件:JFrame,JButton,JLabel 和 JPanel。Hello Swing 用第 33-45 行中的代码来初始化 JButton。 第 33 行创建了按钮。第 37 行将 ACT-I 键组合设置为快捷键,用来模拟按钮的点击。第 39 行为点 击注册了一个事件处理器。第 41-45 行描述了一个按钮,使得辅助技术可以提供有关按钮功能的信息。 第 49-59 行初始化了 JPanel。这些代码创建了 JPanel 对象,设置它的边框,并将它的布局管理器设 置为单列地放置 panel 的内容。最后,将一个按钮和一个标签加入到 Panel 中。Hello Swing 中的 Panel 使用了一个不可见的边框,用来在它周围放入额外的填充。 11.4.5 支持辅助技术 Hello Swing.java 中唯一支持辅助技术的代码是: accContext = jButton.getAccessibleContext(); accContext.setAccessibleDescription( "Pressing this button increments " + " the number of button clicks."); 下列信息集也可由辅助技术使用: jButton = new JButton("I'm a Swing button!"); jLabel = new JLabel(labelPrefix + "0"); jLabel.setText(labelPrefix + numClicks); 在 JFrame,JButton,JLabel 和其他所有组件中,都有内建的 Accessibility 支持。辅助技术可以很容 易地获得文本,甚至与一组件某特定部分相关的文本。 第五节 构造一个 Swing GUI Swing 包定义了两种类型的组件: ⚫ 顶层容器(JFrame,JApplet,JWindow,和 JDialog) ⚫ 轻质组件(其他的 J…,如 JButton,JPanel 和 JMenu) 顶层容器定义了可以包含轻质组件的框架。特别地,一个顶层 Swing 容器提供了一个区域,轻质组 件可在这个区域中绘制自身。顶层容器是它们对应的重质 AWT 组件的 Swing 子类。这些 Swing 容器依 靠它们的 AWT 超类的本地方法与硬件进行适当的交互。 通常,每个 Swing 组件在其容器层次结构中都应当有一个位于组件上面的顶层 Swing 容器。例如, 每个包含 Swing 组件的 Applet 都应作为 JApplet(而它自身又是 java.applet.Applet 的一个子类)的子类来 实现。相似地,每个包含 Swing 组件的主窗口都应用 JFrame 来实现。典型地,如果你在使用 Swing 组 件,你将只能使用 Swing 组件和 Swing 容器。 Swing 组件可以加入到一个与顶层容器关联的 content pane 中,但绝不能直接加入到顶层容器中。 content pane 是一个轻质 Swing 组件,如 JPanel。 下面是一个典型 Swing 程序的 GUI 容器层次结构图,这个程序实现了 一个包含 2 个按钮,一个文本域和一个列表: Jframe ( a top-level Swing container) 构造一个 Swing GUI ⚫ 顶层容器(JFrame,JApplet,JDialog,和 JWindow) ⚫ 轻质组件(如 JButton,JPanel 和 JMenu) ⚫ 将 Swing 组件加入到与顶层容器相关联的 content pane 中
content pane JButton JPanel JTextField List 下面是关于同样的GU的另一个容器层次结构,只是在这里,GUI是在浏览器中运行的一个 Applet. JApplet( a top-level Swing container) content pane JButton Button JTextField JLi 下面是构造如上图所示的GU1层次结构的代码 Import com. sun Java swing 2. import java. awt. 4. public class Swing GUI i 6. JFrame topLevel 7.JPanel jPanel 8.JTextField jTextField 10. 13. Container content Pane 15. Object list Data[=( 16. new String("First selection") 17. new String("Second selection") 18 new String("Third selection") 19.} 21 public static void main(String args)i
113 content pane ` +---------+-------+ JButton JButton JPanel +---------+ JTextField JList 下面是关于同样的 GUI 的另一个容器层次结构,只是在这里,GUI 是在浏览器中运行的一个 Applet。 JApplet ( a top-level Swing container) content pane ` +---------+-------+ JButton JButton JPanel +---------+ JTextField JList 下面是构造如上图所示的 GUI 层次结构的代码: 1.import com.sun.java.swing.*; 2.import java.awt.*; 3. 4.public class SwingGUI { 5. 6.JFrame topLevel; 7.JPanel jPanel; 8.JTextField jTextField; 9.JList jList; 10. 11.JButton b1; 12.JButton b2; 13.Container contentPane; 14. 15.Object listData[] = { 16.new String("First selection"), 17.new String("Second selection"), 18.new String("Third selection") 19.}; 20. 21.public static void main (String args[]) {