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[]) {