第11章 Java基础类.docx

上传人:b****3 文档编号:3853232 上传时间:2022-11-25 格式:DOCX 页数:16 大小:104.78KB
下载 相关 举报
第11章 Java基础类.docx_第1页
第1页 / 共16页
第11章 Java基础类.docx_第2页
第2页 / 共16页
第11章 Java基础类.docx_第3页
第3页 / 共16页
第11章 Java基础类.docx_第4页
第4页 / 共16页
第11章 Java基础类.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

第11章 Java基础类.docx

《第11章 Java基础类.docx》由会员分享,可在线阅读,更多相关《第11章 Java基础类.docx(16页珍藏版)》请在冰豆网上搜索。

第11章 Java基础类.docx

第11章Java基础类

第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等顶层容器

参考文献

以下参考文献可提供有关本模块论题的其他细节内容:

●TheJavaTutorial,这是SunMicrosystems的一本在线教材,可以从

第三节介绍

介绍

●Java基础类包含5个API

●AWT

●Java2D

●Accessibility

●Drag&Drop

●Swing

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介绍

●可插的外观和感觉

●应用程序看上去是与平台有关的

●有客户化的Swing组件

●Swing的体系结构

●它是围绕着实现AWT各个部分的API构筑的

●大多数组件不象AWT那样使用与平台相关的实现

Swing提供了一整套GUI组件,为了保证可移植性,它是完全用Java语言编写的。

可插的外观和感觉

可插的外观和感觉使得开发人员可以构建这样的应用程序:

它们可以在任何平台上执行,而且看上去就象是专门为那个特定的平台而开发的。

一个在Windows环境中执行的程序,似乎是专为这个环境而开发的;而同样的程序在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组件的层次结构:

SwingGUI使用两种类型的类,即GUI类和非GUI支持类。

GUI类是可视的,它从JComponent继承而来,因此称为“J”类。

非GUI类为GUI类提供服务,并执行关键功能;因此它们不产生任何可视的输出。

注-Swing的事件处理类是非GUI类的一例。

Swing组件

Swing组件主要为文本处理、按钮、标签、列表、pane、组合框、滚动条、滚动pane、菜单、表格和树提供了组件。

其中一些组件如下所示:

JAppletJButton

JComboBoxJOptionPane

JListJLabel

Swing组件(续)

JScrollPaneJTable

JScrollBarJSlider

JTooltipJTree

第四节基本的Swing应用程序

HelloSwing应用程序的输出产生下图所示的窗口:

每次用户点击按钮时,标签就会更新。

11.5.1HelloSwing

1.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.//Hereishowyoucansetupaparticular

20.//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-Abeequivalent

36.//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");

6.

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.//SetupaWindowListenerinnerclasstohandle

23.//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包

●导入Swing包

●选择外观和感觉

●getLookAndFeel()

●设置窗口容器

●JFrame与Frame相似

●你不能直接将组件加入到JFrame中

●一个contentpane包含了除菜单条外所有Frame的可视组件

语句行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组件

Swing应用程序基础

●建立Swing组件

●HelloSwing.java示例实例化了4个Swing组件,这4个组件是:

JFrame,JButton,JLabel和JPanel

●支持辅助技术

●HelloSwing.java示例代码支持辅助技术

accContext=jButton.getAccessibleContext();

accContext.setAccessibleDescription(

"Pressingthisbuttonincrements"+

"thenumberofbuttonclicks.");

HelloSwing程序显式地实例化了4个组件:

JFrame,JButton,JLabel和JPanel。

HelloSwing用第33-45行中的代码来初始化JButton。

第33行创建了按钮。

第37行将ACT-I键组合设置为快捷键,用来模拟按钮的点击。

第39行为点击注册了一个事件处理器。

第41-45行描述了一个按钮,使得辅助技术可以提供有关按钮功能的信息。

第49-59行初始化了JPanel。

这些代码创建了JPanel对象,设置它的边框,并将它的布局管理器设置为单列地放置panel的内容。

最后,将一个按钮和一个标签加入到Panel中。

HelloSwing中的Panel使用了一个不可见的边框,用来在它周围放入额外的填充。

11.4.5支持辅助技术

HelloSwing.java中唯一支持辅助技术的代码是:

accContext=jButton.getAccessibleContext();

accContext.setAccessibleDescription(

"Pressingthisbuttonincrements"+

"thenumberofbuttonclicks.");

下列信息集也可由辅助技术使用:

jButton=newJButton("I'maSwingbutton!

");

jLabel=newJLabel(labelPrefix+"0");jLabel.setText(labelPrefix+numClicks);

在JFrame,JButton,JLabel和其他所有组件中,都有内建的Accessibility支持。

辅助技术可以很容易地获得文本,甚至与一组件某特定部分相关的文本。

第五节构造一个SwingGUI

构造一个SwingGUI

●顶层容器(JFrame,JApplet,JDialog,和JWindow)

●轻质组件(如JButton,JPanel和JMenu)

●将Swing组件加入到与顶层容器相关联的contentpane中。

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组件可以加入到一个与顶层容器关联的contentpane中,但绝不能直接加入到顶层容器中。

contentpane是一个轻质Swing组件,如JPanel。

下面是一个典型Swing程序的GUI容器层次结构图,这个程序实现了

一个包含2个按钮,一个文本域和一个列表:

Jframe(atop-levelSwingcontainer)

contentpane

`+---------+-------+

JButtonJButtonJPanel

+---------+

JTextFieldJList

下面是关于同样的GUI的另一个容器层次结构,只是在这里,GUI是在浏览器中运行的一个Applet。

JApplet(atop-levelSwingcontainer)

contentpane

`+---------+-------+

JButtonJButtonJPanel

+---------+

JTextFieldJList

下面是构造如上图所示的GUI层次结构的代码:

1.importcom.sun.java.swing.*;

2.importjava.awt.*;

3.

4.publicclassSwingGUI{

5.

6.JFrametopLevel;

7.JPaneljPanel;

8.JTextFieldjTextField;

9.JListjList;

10.

11.JButtonb1;

12.JButtonb2;

13.ContainercontentPane;

14.

15.ObjectlistData[]={

16.newString("Firstselection"),

17.newString("Secondselection"),

18.newString("Thirdselection")

19.};

20.

21.publicstaticvoidmain(Stringargs[]){

22.SwingGUIswingGUI=newSwingGUI();

23.swingGUI.go();

24.}

25.

26.publicvoidgo(){

27.topLevel=newJFrame("SwingGUI");

28.

29.//SetuptheJPanel,whichcontainsthetextfield

30.//andlist.

31.jPanel=newJPanel();

32.jTextField=newJTextField(20);

33.jList=newJList(listData);

34.

35.contentPane=topLevel.getContentPane();

36.contentPane.setLayout(newBorderLayout());

37.

38.b1=newJButton("1");

39.b2=newJButton("2");

40.contentPane.add(b1,BorderLayout.NORTH);

41.contentPane.add(b2,BorderLayout.SOUTH);

42.

43.jPanel.setLayout(newFlowLayout());

44.jPanel.add(jTextField);

45.jPanel.add(jList);

46.contentPane.add(jPanel,BorderLayout.CENTER);

47.

48.topLevel.pack();

49.topLevel.setVisible(true);

50.}

51.}

第六节JComponent类

JComponent类

●Swing组件是JComponent的子类

●边框

●双缓冲

●提示框

●键盘导航

●应用程序范围的可插式外观和感觉

所有Swing都作为JComponent的子类来实现,而JComponent类又是从Container类继承而来。

Swing组件从JComponent继承了如下功能:

●边框

你可以用setBorder()方法来指定在组件周围显示的边框。

还可用一个EmptyBorder的实例来指定一个组件在其周围留有一定的额外空间。

●双缓冲

双缓冲可以改善一个频繁被改变的组件的外观。

现在你不需要编写双缓冲代码――Swing已为你提供了。

缺省情况下,Swing组件是双缓冲的。

●提示框

通过用setToolTipText()方法来指定一个字符串,你可以提供给用户有关某个组件的帮助信息。

当光标暂停在组件上时,所指定的字符串就会在组件附近的一个小窗口中显示出来。

●键盘导航

使用registerKeyboardAction()方法,你可以让用户以键盘代替鼠标来操作GUI。

用户为启动一个动作所必须按下的

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1