您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 其它办公文档 > Java基础类-Swing
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组件定义容器和组件,并解释如何联合使用它们来构造一个SwingGUI编写,编译并运行一个基本的Swing应用程序高效地使用诸如Jframe和Japplet等顶层容器105参考文献以下参考文献可提供有关本模块论题的其他细节内容:TheJavaTutorial,这是SunMicrosystems的一本在线教材,可以从得到。第三节介绍Java基础类是关于GUI组件和服务的完整集合,它大大简化了健壮Java应用程序的开发和实现。JFC,作为JDK1.2的一个有机部分,主要包含5个API:AWT,Java2D,Accessibility,Drag&Drop,Swing。它提供了帮助开发人员设计复杂应用程序的一整套应用程序开发包。正如前面那些模块中所讨论的那样,AWT组件为各类Java应用程序提供了多种GUI工具。Java2D是一图形API,它为Java应用程序提供了一套高级的有关二维(2D)图形图像处理的类。Java2DAPI扩展了java.awt和java.awt.image类,并提供了丰富的绘图风格,定义复杂图形的机制和精心调节绘制过程的方法和类。这些API使得独立于平台的图形应用程序的开发更加简便。AccessibilityAPI提供了一套高级工具,用以辅助开发使用非传统输入和输出的应用程序。它提供了一个辅助的技术接口,如:屏幕阅读器,屏幕放大器,听觉文本阅读器(语音处理)等等。Drag&Drop技术提供了Java和本地应用程序之间的互操作性,用来在Java应用程序和不支持Java技术的应用程序之间交换数据。JFC模块的重点在Swing。Swing用来进行基于窗口的应用程序开发,它提供了一套丰富的组件和工作框架,以指定GUI如何独立于平台地展现其视觉效果。11.3.1Swing介绍Swing提供了一整套GUI组件,为了保证可移植性,它是完全用Java语言编写的。可插的外观和感觉可插的外观和感觉使得开发人员可以构建这样的应用程序:它们可以在任何平台上执行,而且看上去就象是专门为那个特定的平台而开发的。一个在Windows环境中执行的程序,似乎是专为这个环境而介绍Java基础类包含5个APIAWTJava2DAccessibilityDrag&DropSwingSwing介绍可插的外观和感觉应用程序看上去是与平台有关的有客户化的Swing组件Swing的体系结构它是围绕着实现AWT各个部分的API构筑的大多数组件不象AWT那样使用与平台相关的实现106开发的;而同样的程序在Unix平台上执行,它的行为又似乎是专为Unix环境开发的。开发人员可以创建自己的客户化Swing组件,带有他们想设计出的任何外观和感觉。这增加了用于跨平台应用程序和Applet的可靠性和一致性。一个完整应用程序的GUI可以在运行时刻从一种外观和感觉切换到另一种。Swing的体系结构与AWT比较,Swing提供了更完整的组件,引入了许多新的特性和能力。SwingAPI是围绕着实现AWT各个部分的API构筑的。这保证了所有早期的AWT组件仍然可以使用。AWT采用了与特定平台相关的实现,而绝大多数Swing组件却不是这样做的,因此Swing的外观和感觉是可客户化和可插的。上图显示了JFC各个部分之间的相互关系。Java2D,Accessibility,Drag&Drop,和AccessibilityAPI是AWT和JFC的一部分,但它们不属于Swing。这是因为,这些组件使用了一些本地代码,而Swing却不是这样的。Swing是围绕着一个称为JComponent的新组件构建的,而JComponent则由AWT的容器类扩展而来。Swing的层次结构下图说明了Swing组件的层次结构:107SwingGUI使用两种类型的类,即GUI类和非GUI支持类。GUI类是可视的,它从JComponent继承而来,因此称为“J”类。非GUI类为GUI类提供服务,并执行关键功能;因此它们不产生任何可视的输出。注-Swing的事件处理类是非GUI类的一例。Swing组件Swing组件主要为文本处理、按钮、标签、列表、pane、组合框、滚动条、滚动pane、菜单、表格和树提供了组件。其中一些组件如下所示:JAppletJButtonJComboBoxJOptionPane108JListJLabelSwing组件(续)JScrollPaneJTableJScrollBarJSliderJTooltipJTree第四节基本的Swing应用程序HelloSwing应用程序的输出产生下图所示的窗口:每次用户点击按钮时,标签就会更新。11.5.1HelloSwing1091.importjava.awt.*;2.importjava.awt.event.*;3.importcom.sun.java.swing.*;4.importjava.awt.accessibility.*;5.6.publicclassHelloSwingimplementsActionListener{7.privateJFramejFrame;8.privateJLabeljLabel;9.privateJPaneljPanel;10.privateJButtonjButton;11.privateAccessibleContextaccContext;12.13.privateStringlabelPrefix=14.Numberofbuttonclicks:;15.privateintnumClicks=0;16.17.publicvoidgo(){18.19.//Hereishowyoucansetupaparticular20.//lookAndFeel.Notnecessaryfordefault.21.//22.//try{23.//UIManager.setLookAndFeel(24.//UIManager.getLookAndFeel());25.//}catch(UnsupportedLookAndFeelExceptione){26.//System.err.println(Couldn'tusethe+27.//defaultlookandfeel+e);28.//}29.30.jFrame=newJFrame(HelloSwing);31.jLabel=newJLabel(labelPrefix+0);32.33.jButton=newJButton(IamaSwingbutton!);34.35.//Createashortcut:makeALT-Abeequivalent36.//topressingmouseoverbutton.37.jButton.setMnemonic('i');38.39.jButton.addActionListener(this);40.HelloSwing(续)1.//Addsupportforaccessibility.2.accContext=jButton.getAccessibleContext();3.accContext.setAccessibleDescription(4.Pressingthisbuttonincrements+5.thenumberofbuttonclicks);1106.7.//Setuppane.8.//Giveitaborderaroundtheedges.9.jPanel=newJPanel();10.jPanel.setBorder(11.BorderFactory.createEmptyBorder(12.30,30,10,30));13.14.//Arrangeforcomptstobeinasinglecolumn.15.jPanel.setLayout(newGridLayout(0,1));16.17.//Putcomptsinpane,notinJFramedirectly.18.jPanel.add(jButton);19.jPanel.add(jLabel);20.jFrame.setContentPane(jPanel);21.22.//SetupaWindowListenerinnerclasstohandle23.//window'squitbutton.24.WindowListenerwl=newWindowAdapter(){25.publicvoidwindowClosing(WindowEvente){26.System.exit(0);27.}28.};29.jFrame.addWindowListener(wl);30.31.jFrame.pack();32.jFrame.setVisible(true);33.}34.HelloSwing(续)1.//Buttonhandling.2.publicvoidactionPerformed(ActionEvente){3.numClicks++;4.jLabel.setText(labelPrefix+numClicks);5.}6.7.publicstaticvoidmain(String[]args){8.9.HelloSwinghelloSwing=newHelloSwing();10.helloSwing.go();11.}12.}11.4.2导入Swing包111语句行importcom.sun.java.swing.*装入整个Swing包,它包括了标准Swing组件和功能。选择外观和感觉HelloSwing的第22-28行给定了应用程序外观和感觉的格式。getLookAndFeel()方法返回在Windows环境中的外观和感觉。在运行Solaris操作系统的机器上,这个方法则返回一个公共桌面环境(CDE)/Motif的外观和感觉。因为都是缺省值,所以对本例来说,这些行都不是必需的。11.4.3建立窗口Swing程序用JFrame对象实现了它们的窗口。JFrame类是AWTFrame类的一个子类。它还加入了一些Swing所独有的特性。HelloSwing中,处理JFrame的代码如下:publicHelloSwing(){JFramejFrame;JPaneljPanel;.....jFrame=newJFrame(HelloSwing);jPanel=newJPanel();.......jFrame.setContentPane(jPanel);这段代码与使用Frame的代码十分相似。唯一的区别在于,你不能将组件加入到JFrame中。你可以或者将组件加入到JFrame的contentpane中,或者提供一个新的contentpane。一个contentpane是一个包含除菜单条(如果有的话)外所有框架的可视组件的容器。要获得一个JFrame的contentpane,可使用getContentPane()方法。要设置它的contentpane(如前面本例所示),则可使用setContentPane()方法。11.4.4建立Swing组件导入Swi
本文标题:Java基础类-Swing
链接地址:https://www.777doc.com/doc-4851001 .html