Java图形用户界面设计.ppt
《Java图形用户界面设计.ppt》由会员分享,可在线阅读,更多相关《Java图形用户界面设计.ppt(141页珍藏版)》请在三一办公上搜索。
1、第9章 图形用户界面(GUI)设计,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内容的基础上新增或改进了一
2、些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.一个Java GUI简单程序【例9.1】一个简单的Swin
3、g GUI应用程序。在一个框架窗口中显示两个标签和一个按钮:上面的标签显示一串固定的文字信息,选择按钮后在下面的标签上显示系统现在的时间。import java.awt.*;import.*;import javax.swing.*;import java.util.*;/继承JFrame类并实现ActionListener接口public class SwingDemo extends JFrame implements ActionListener JButton b1;/声明按钮对象 JLabel l1,l2;/声明标签对象,SwingDemo()/定义构造方法 super(Swing应
4、用程序的例);/调用父类的构造方法 l1=new JLabel(一个GUI应用程序的例子,JLabel.CENTER);/定义标签,文字居中 l2=new JLabel();/定义无文字标签 b1=new JButton(现在时间T);/定义按钮 b1.setMnemonic(KeyEvent.VK_T);/设置按钮的快捷键 b1.setActionCommand(time);/设置控制名 b1.addActionListener(this);/注册按钮事件 add(l1,BorderLayout.NORTH);/添加标签l1 add(l2,BorderLayout.CENTER);/添加标签
5、l2 add(b1,BorderLayout.SOUTH);/添加标签b1,/对按钮引发事件编程 public void actionPerformed(ActionEvent e)/捕获按钮事件 Calendar c1=Calendar.getInstance();/获取系统日期和事件 if(e.getActionCommand().equals(time)/判断是否为所需的按钮事件 l2.setText(“现在时间是”+c1.get(Calendar.HOUR_OF_DAY)+“时”+c1.get(Calendar.MINUTE)+“分”);/设置标签文字 l2.setHorizontal
6、Alignment(JLabel.CENTER);/设置标签标签文字居中对齐,else System.exit(0);public static void main(String args)/主方法 JFrame.setDefaultLookAndFeelDecorated(true);/加此语句显示为运行结果图的右图 JFrame frame=new SwingDemo();/创建JFrame对象,初始不可见 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/设置框架关闭按钮事件 frame.pack();/压缩框架的显示区域 fra
7、me.setVisible(true);/显示框架主窗口,程序运行后显示的形式如下图。Java Swing GUI应用程序中的基本代码如下。(1)引入合适的包和类一般的Swing GUI应用程序应包含程序中的前三个引入语句,它们分别表示引入awt包、awt事件处理包和swing包。其他包按需引入。,由于Swing组件使用AWT的结构,包括AWT的事件驱动模式,所以,使用swing组件的程序一般需要使用awt包。(2)使用缺省的观感或设置自己的观感(Look and Feel)(3)设置一个顶层的容器(4)根据需要,使用缺省的布局管理器或设置另外的布局管理器(5)定义组件并将它们添加到容器(6)
8、对组件或事件编码,9.1.2 容器、组件、布局和观感1.容器(Container)和组件(Component)一个Java的图形用户界面的最基本元素是组件,组件是可以以图形化的方式显示在屏幕上并能与用户进行交互的对象,如一个按钮、一个文本框等。在Java语言中,通常将组件放在一定的容器内使用。容器实际上是一种具有容纳其他组件和容器的功能的组件。抽象类Container是所有容器的父类,其中包含了很多有关容器的功能和方法。而类Container又是Java语言的组件类Component的子类。,2.布局管理器(Layout Manager)为了使得图形用户界面具有良好的平台无关性,在Java语言
9、中提供了布局管理器这个工具来管理组件在容器中的布局,而不使用直接设置组件位置和大小的方式。容器中的组件定位由布局管理器决定。每个容器都有一个缺省的布局管理器,当容器需要对某个组件进行定位或判断其大小尺寸时,就会调用其相应的布局管理器。但也可以不用缺省的布局管理器,在程序中指定其新的布局管理器。Java平台提供多种布局管理器,常用的有FlowLayout、BorderLayout、GridLayout、CardLayout、BoxLayout和GridBagLayout等。使用不同的布局管理器,组件在容器上的位置和大小都是很不一样的。,在程序中安排组件的位置和大小时,应该注意:(1)容器中的布局
10、管理器负责各个组件的大小和位置。因此用户无法在这种情况下直接设置这些属性。若试图使用Java语言提供的setLocation()、setSize()、setBounds()等方法,则都会被布局管理器覆盖。(2)若用户确实需要亲自设置组件的位置和大小,则应取消该容器的布局管理器,方法为:setLayout(null);随后,用户必须使用setLocation()、setSize()、setBounds()等方法为组件设置大小和位置,但这种方法将会导致程序的系统相关。在一个GUI应用程序的界面上,除了可以见到上述的标准GUI元素外,还可以见到一些非交互的起到装饰、美化界面的作用的几何图形、图案、图
11、像等内容。,3.观感(Look and Feel)Java swing的一个重要特征是它的可插入的“观感”体系。一个Swing应用程序或一个最终用户可指明所需要的观感,使得Swing应用程序的外观和行为都可以被定制。Swing运行一个缺省的Java观感(也称为Metal观感),还实现了模仿Motif和Windows的观感。这样,一个Swing程序可拥有Java程序的独特外观,也可以拥有熟悉的Windows操作系统外观。在本章稍后部分的单选按钮的程序例中分别显示了Windows、Motif和Metal三种不同风格的观感。一般在应用程序的JFrame的构造方法中或在JApplet的init()方法
12、中进行观感的设置。【例9.2】设置观感。import javax.swing.*;import java.awt.*;,public class SetLAF public static void setNativeLookAndFeel()try UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName();catch(Exception e)(设置native LAF错误:+e);public static void setJavaLookAndFeel()try UIManager.setLookAndFeel(UI
13、Manager.getCrossPlatformLookAndFeelClassName();catch(Exception e)(设置Java LAF错误:+e);,public static void setMotifLookAndFeel()try UIManager.setLookAndFeel(“.motif.MotifLookAndFeel);catch(Exception e)(设置Motif LAF错误:+e);因为setLookAndFeel()方法抛出异常,因此设置观感的代码应捕捉异常。本例创建的类SetLAF可在以后的程序中设置观感时使用。,9.1.3事件处理在一个GUI
14、程序中,为了能够接收用户的输入、命令的按键和鼠标操作,程序系统首先应该能够识别这些操作并做出相应的响应。通常一个键盘和鼠标操作将引发一个系统预先定义好的事件,用户程序只要编写代码定义每个事件发生时程序应做出何种响应即可。这些代码会在它们对应的事件发生时由系统自动调用,这就是GUI程序中事件和事件响应的基本原理。在Java语言中,除了键盘和鼠标操作,系统的状态改变也可以引发事件。,可能产生事件的组件称为事件源,不同事件源上发生的事件种类是不同的。若希望事件源上引发的事件被程序处理,需要将事件源注册给能够处理该事件源上那种事件类型的监听器。监听器具有监听和处理某类事件的功能,它可以是包容事件源的容
15、器,也可以是另外的对象。也就是说,事件源和事件处理是分开的,一般组件都不处理自己的事件,而将事件处理委托给外部的处理实体,这种事件处理模型称为授权处理模型。事件的行为多种多样,由不同的监听器处理。编写事件处理程序首先应确定关注的事件属于何种监听器类型。,在AWT中,提供11种标准的监听器类型,见下表。监听器 适配器类 注册方法 ActionListener addActionListenerAdjustmentListener addAdjustmentListenerComponentListener ComponentAdapter addComponentListenerContaine
16、rListener ContainerAdapter addContainerListenerFocusListener FocusAdapter addFocusListenerItemListener addItemListenerKeyListener KeyAdapter addKeyListenerMouseListener MouseAdapter addMouseListenerMouseMotionListener MouseMotionAdapter addMouseMotionListenerTextListener addTextListenerWindowListene
17、r WindowAdapter addWindowListener,在确定监听器类型后,要用事件源类的注册方法来注册一个监听器类的对象。这样,事件源产生的事件会传送给已注册的处理该类事件的监听器对象,该对象将自动调用相应的事件处理方法来处理该事件。具体的注册方法是:用监听器类的对象作为参数调用事件源本身的addXxxListener()方法。该方法的参数是一个监听器类的对象,有多种形式。例如:(1)分离的监听器类,该类通常为继承相应事件适配器类的子类,类中包含了事件处理方法。参数是该类的一个对象。(2)实现监听器接口,参数为this,表示本对象就是一个监听器类的对象。在本类中包含事件处理方法。
18、(3)有名内部类,参数形式为继承事件适配器类的子类对象,在子类中包含事件处理方法。(4)匿名内部类,参数形式为用new开始的一个无名的类定义。其中包含事件处理方法。,9.2布局管理器,在容器中所有组件的布局(位置和大小)由布局管理器来控制。在Java语言中提供了FlowLayout、BorderLayout、GridLayout、CardLayout和GridBagLayout等多种布局管理器。每种容器都有自己缺省的布局管理器。缺省地,JPanel使用FlowLayout,而内容窗格 ContentPane(JApplet、JDialog和JFrame对象的主容器)使用BorderLayout
19、。如果不希望使用缺省的布局管理器,则可使用所有容器的父类Container的setLayout()方法来改变缺省的布局管理器。,1.FlowLayoutFlowLayout布局是一种最基本的布局。这种布局指的是把组件一个接一个从左至右、从上至下地依次放在容器上,每一行中的组件缺省为居中对齐。当容器的尺寸改变后,组件的大小不变,但布局将会随之变化。FlowLayout是Applet和JPanel的缺省布局管理器。FlowLayout类的构造方法如下:FlowLayout()创建每行组件对齐方式为居中对齐、组件间距为5个像素单位的对象FlowLayout(int align)创建指定每行组件对齐方
20、式、组件间距为5个像素单位的对象,align可取三个静态常量LEFT、CENTER和RIGHT之一(分别表示左、中、右对齐方式)。,FlowLayout(int align,int hgap,int vgap)创建指定每行组件对齐方式的对象,该对象也使用参数vgap和hgap指定了组件间的以像素为单位的纵横间距。向使用FlowLayout布局的容器添加组件可简单地使用下面的语句:add(组件名);2BorderLayoutBorderLayout 是内容窗格的缺省布局管理器。内容窗格是框架JFrame,小程序JApplet和对话框JDialog的主容器。BorderLayout将容器的布局分为
21、五个区:北区、南区、东区、西区和中区。这几个区的分布规律是“上北下南,左西右东”。当容器的大小改变时,容器中的各个组件相对位置不变,其中间部分组件的尺寸会发生变化,四周组件宽度固定不变。,BorderLayout类的构造方法如下:BorderLayout()创建组件间无间距的BorderLayout对象。BorderLayout(int hgap,int vgap)创建有指定组件间距的对象。向BorderLayout布局的容器添加组件时,每添加一个组件都应指明该组件加在哪个区域中。add()方法的第二个参数指明加入的区域,区域东南西北中可用五个静态常量表示:BorderLayout.EAST、
22、BorderLayout.SOUTH、BorderLayout.WEST、BorderLayout.NORTH和BorderLayout.CENTER。,【例9.3】将五个按钮加入BorderLayout的五个区。import java.awt.*;import javax.swing.*;public class BorderLayoutDemo extends JApplet public void init()Container c=getContentPane();c.add(new Button(北North),BorderLayout.NORTH);c.add(new Button
23、(南South),BorderLayout.SOUTH);c.add(new Button(东East),BorderLayout.EAST);c.add(new Button(西West),BorderLayout.WEST);c.add(new Button(中Center),BorderLayout.CENTER);程序运行的结果见下图。,3GridLayoutGridLayout布局是将容器的空间分成若干行和列的一个个网格,可以给出网格的行数和列数,组件添加到这些网格中。当改变容器的大小后,其中的组件相对位置不变,但大小改变。容器中各个组件同高度、同宽度。各个组件缺省的排列方式为:从上
24、到下,从左到右。,GridLayout类的构造方法如下:public GridLayout()创建单行每个组件一列的GridLayout对象。public GridLayout(int rows,int cols)创建指定行列数的GridLayout对象。public GridLayout(int rows,int cols,int hgap,int vgap)创建指定行列数的GridLayout对象。因为没有容器缺省使用GridLayout,因此在使用GridLayout前,要用setLayout()方法将容器的布局管理器设置为GridLayout。在向GridLayout添加组件时,组件加
25、入容器要按序进行,每个网格中都必须加入组件,若希望某个网格为空,可以为该网格加入一个空的标签:add(new JLabel()。,【例9.4】GridLayout布局。import java.awt.*;import javax.swing.*;public class GridLayoutDemo extends JApplet public void init()Container c=getContentPane();c.setLayout(new GridLayout(3,2);c.add(new Button(1);c.add(new Button(2);c.add(new Butt
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 图形 用户界面 设计
链接地址:https://www.31ppt.com/p-6509684.html