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