您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 9.Java图形用户界面设计
9.1图形用户界面设计概述9.1.1GUI支持包和简单GUI程序例1.java.awt包Java语言在java.awt包中提供了大量地进行GUI设计所使用的类和接口,包括绘制图形、设置字体和颜色、控制组件、处理事件等内容,AWT是Java语言进行GUI程序设计的基础。2.javax.swing包Swing包是Java基础类库(JavaFoundationClasses,JFC)的一部分。Swing提供了从按钮到可分拆面板和表格的所有组件。Swing组件是Java语言提供的第二代GUI设计工具包,它以AWT为基础,在AWT内容的基础上新增或改进了一些GUI组件,使得GUI程序功能更强大,设计更容易、更方便。Swing是开发新组件的项目代码名,现在,这个名字常用来引用新组件和相关的API。AWT组件和对应的Swing组件,从名称上很容易记忆和区别。例如,AWT的框架类、面板类、按钮类和菜单类,被命名为Frame、Panel、Button和Menu,而Swing对应的组件类被命名为JFrame、JPanel、JButton和JMenu。与AWT组件相比,Swing组件的名前多一个“J”字母。另外,AWT组件在java.awt包中,而Swing组件在javax.swing包中。3.一个JavaGUI简单程序【例9.1】一个简单的SwingGUI应用程序。在一个框架窗口中显示两个标签和一个按钮:上面的标签显示一串固定的文字信息,选择按钮后在下面的标签上显示系统现在的时间。importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjava.util.*;//继承JFrame类并实现ActionListener接口publicclassSwingDemoextendsJFrameimplementsActionListener{JButtonb1;//声明按钮对象JLabell1,l2;//声明标签对象SwingDemo(){//定义构造方法super(Swing应用程序的例);//调用父类的构造方法l1=newJLabel(一个GUI应用程序的例子,JLabel.CENTER);//定义标签,文字居中l2=newJLabel();//定义无文字标签b1=newJButton(现在时间[T]);//定义按钮b1.setMnemonic(KeyEvent.VK_T);//设置按钮的快捷键b1.setActionCommand(time);//设置控制名b1.addActionListener(this);//注册按钮事件add(l1,BorderLayout.NORTH);//添加标签l1add(l2,BorderLayout.CENTER);//添加标签l2add(b1,BorderLayout.SOUTH);//添加标签b1}//对按钮引发事件编程publicvoidactionPerformed(ActionEvente){//捕获按钮事件Calendarc1=Calendar.getInstance();//获取系统日期和事件if(e.getActionCommand().equals(time)){//判断是否为所需的按钮事件l2.setText(“现在时间是”+c1.get(Calendar.HOUR_OF_DAY)+“时”+c1.get(Calendar.MINUTE)+“分”);//设置标签文字l2.setHorizontalAlignment(JLabel.CENTER);//设置标签标签文字居中对齐}elseSystem.exit(0);}publicstaticvoidmain(Stringargs[]){//主方法JFrame.setDefaultLookAndFeelDecorated(true);//加此语句显示为运行结果图的右图JFrameframe=newSwingDemo();//创建JFrame对象,初始不可见frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置框架关闭按钮事件frame.pack();//压缩框架的显示区域frame.setVisible(true);//显示框架主窗口}}程序运行后显示的形式如下图。JavaSwingGUI应用程序中的基本代码如下。(1)引入合适的包和类一般的SwingGUI应用程序应包含程序中的前三个引入语句,它们分别表示引入awt包、awt事件处理包和swing包。其他包按需引入。由于Swing组件使用AWT的结构,包括AWT的事件驱动模式,所以,使用swing组件的程序一般需要使用awt包。(2)使用缺省的观感或设置自己的观感(LookandFeel)(3)设置一个顶层的容器(4)根据需要,使用缺省的布局管理器或设置另外的布局管理器(5)定义组件并将它们添加到容器(6)对组件或事件编码9.1.2容器、组件、布局和观感1.容器(Container)和组件(Component)一个Java的图形用户界面的最基本元素是组件,组件是可以以图形化的方式显示在屏幕上并能与用户进行交互的对象,如一个按钮、一个文本框等。在Java语言中,通常将组件放在一定的容器内使用。容器实际上是一种具有容纳其他组件和容器的功能的组件。抽象类Container是所有容器的父类,其中包含了很多有关容器的功能和方法。而类Container又是Java语言的组件类Component的子类。2.布局管理器(LayoutManager)为了使得图形用户界面具有良好的平台无关性,在Java语言中提供了布局管理器这个工具来管理组件在容器中的布局,而不使用直接设置组件位置和大小的方式。容器中的组件定位由布局管理器决定。每个容器都有一个缺省的布局管理器,当容器需要对某个组件进行定位或判断其大小尺寸时,就会调用其相应的布局管理器。但也可以不用缺省的布局管理器,在程序中指定其新的布局管理器。Java平台提供多种布局管理器,常用的有FlowLayout、BorderLayout、GridLayout、CardLayout、BoxLayout和GridBagLayout等。使用不同的布局管理器,组件在容器上的位置和大小都是很不一样的。在程序中安排组件的位置和大小时,应该注意:(1)容器中的布局管理器负责各个组件的大小和位置。因此用户无法在这种情况下直接设置这些属性。若试图使用Java语言提供的setLocation()、setSize()、setBounds()等方法,则都会被布局管理器覆盖。(2)若用户确实需要亲自设置组件的位置和大小,则应取消该容器的布局管理器,方法为:setLayout(null);随后,用户必须使用setLocation()、setSize()、setBounds()等方法为组件设置大小和位置,但这种方法将会导致程序的系统相关。在一个GUI应用程序的界面上,除了可以见到上述的标准GUI元素外,还可以见到一些非交互的起到装饰、美化界面的作用的几何图形、图案、图像等内容。3.观感(LookandFeel)Javaswing的一个重要特征是它的可插入的“观感”体系。一个Swing应用程序或一个最终用户可指明所需要的观感,使得Swing应用程序的外观和行为都可以被定制。Swing运行一个缺省的Java观感(也称为Metal观感),还实现了模仿Motif和Windows的观感。这样,一个Swing程序可拥有Java程序的独特外观,也可以拥有熟悉的Windows操作系统外观。在本章稍后部分的单选按钮的程序例中分别显示了Windows、Motif和Metal三种不同风格的观感。一般在应用程序的JFrame的构造方法中或在JApplet的init()方法中进行观感的设置。【例9.2】设置观感。importjavax.swing.*;importjava.awt.*;publicclassSetLAF{publicstaticvoidsetNativeLookAndFeel(){try{UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());}catch(Exceptione){System.out.println(设置nativeLAF错误:+e);}}publicstaticvoidsetJavaLookAndFeel(){try{UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());}catch(Exceptione){System.out.println(设置JavaLAF错误:+e);}}publicstaticvoidsetMotifLookAndFeel(){try{UIManager.setLookAndFeel(“com.sun.java.swing.plaf.motif.MotifLookAndFeel);}catch(Exceptione){System.out.println(设置MotifLAF错误:+e);}}}因为setLookAndFeel()方法抛出异常,因此设置观感的代码应捕捉异常。本例创建的类SetLAF可在以后的程序中设置观感时使用。9.1.3事件处理在一个GUI程序中,为了能够接收用户的输入、命令的按键和鼠标操作,程序系统首先应该能够识别这些操作并做出相应的响应。通常一个键盘和鼠标操作将引发一个系统预先定义好的事件,用户程序只要编写代码定义每个事件发生时程序应做出何种响应即可。这些代码会在它们对应的事件发生时由系统自动调用,这就是GUI程序中事件和事件响应的基本原理。在Java语言中,除了键盘和鼠标操作,系统的状态改变也可以引发事件。可能产生事件的组件称为事件源,不同事件源上发生的事件种类是不同的。若希望事件源上引发的事件被程序处理,需要将事件源注册给能够处理该事件源上那种事件类型的监听器。监听器具有监听和处理某类事件的功能,它可以是包容事件源的容器,也可以是另外的对象。也就是说,事件源和事件处理是分开的,一般组件都不处理自己的事件,而将事件处理委托给外部的处理实体,这种事件处理模型称为授权处理模型。事件的行为多种多样,由不同的监听器处理。编写事件处理程序首先应确定关注的事件属于何种监听器类型。在AWT中,提供11种标准的监听器类型,见下表。监听器适配器类注册方法ActionListeneraddActionListenerAdjustmentListeneraddAdjustmentListenerComponentListenerComponentAdapteraddComponentListenerContainerListenerContainerAdapteraddContainerListenerFocusListenerFocusAdapteraddFocusListenerItemListeneraddItemListenerKeyListenerKeyAdapteraddKeyListenerMouseListenerMouseAdapteraddMouseListenerMouseMotionListenerMouseMotionAdapteraddMouseMotionListenerTextListeneraddTextListenerWindowListenerWindowAdapteraddWindowListener在确定监听器类型后,要用事件源类的注册方法来
本文标题:9.Java图形用户界面设计
链接地址:https://www.777doc.com/doc-3271936 .html