学习导读首先我们学习一些基本的图形编程知识包括窗口.ppt
《学习导读首先我们学习一些基本的图形编程知识包括窗口.ppt》由会员分享,可在线阅读,更多相关《学习导读首先我们学习一些基本的图形编程知识包括窗口.ppt(205页珍藏版)》请在三一文库上搜索。
1、第9章 图形用户界面(GUI)设计,学习导读 首先,我们学习一些基本的图形编程知识,包括窗口的显示及外观设置、在窗口中显示文字和图像等; 接下来,介绍Java的事件处理机制,例如如何在程序中接收并处理如键盘按键和鼠标点击等“事件”; 最后,系统地介绍图形用户界面中常用组件的用法,如布局管理器、文本框、复选框、菜单、对话框等。,教学重点与难点,容器、组件、布局和观感 Java的事件处理机制 布局管理器 各种Awt组件的用法 各种Swing组件的用法 窗口事件、键盘事件、鼠标事件的处理,Java 1.0的出现带来了抽象窗口工具箱(AWT)。设计目标是希望构建一个通用的GUI,使得利用它编写的程序能
2、够运行在所有的平台上,以实现Sun公司提出的口号“一次编写,随处运行”。 在Java 1.2中,Sun公司推出了新的用户界面库:Swing。相对AWT来说,Swing功能更强大、使用更方便,它的出现使得Java的图形用户界面上了一个台阶。 但是,Swing并没有代替AWT。在Java 1.1中,AWT事件处理模型有了根本改变。Swing使用的仍然是Java 1.1的事件处理模型。,9.1图形用户界面设计概述,9.1.1 GUI支持包和简单GUI程序例 1.java.awt包 Java语言在java.awt包中提供了大量地进行GUI设计所使用的类和接口,包括绘制图形、设置字体和颜色、控制组件、处
3、理事件等内容,AWT是Java语言进行GUI程序设计的基础。 2. javax.swing包 Swing包是Java基础类库(Java Foundation Classes,JFC)的一部分。Swing提供了从按钮到可分拆面板和表格的所有组件。,AWT组件和对应的Swing组件,从名称上很容易记忆和区别。 例如,AWT的框架类、面板类、按钮类和菜单类,被命名为Frame、Panel、Button和Menu,而Swing对应的组件类被命名为JFrame、JPanel、JButton和JMenu。与AWT组件相比,Swing组件的名前多一个 “J” 字母。 另外,AWT 组件在java.awt包中
4、,而Swing组件在javax.swing包中。,3.一个Java GUI简单程序 【例9.1】课本P188 Java Swing GUI应用程序中的基本代码如下: (1)引入合适的包和类 一般的Swing GUI应用程序应包含程序中的前三个引入语句,它们分别表示引入awt包、awt事件处理包和swing包。其他包按需引入。 由于Swing组件使用AWT的结构,包括AWT的事件驱动模式,所以,使用swing组件的程序一般需要使用awt包。 (2)使用缺省的观感或设置自己的观感(Look and Feel) (3)设置一个顶层的容器 (4)根据需要,使用缺省的布局管理器或设置另外的布局管理器 (
5、5)定义组件并将它们添加到容器 (6)对组件或事件编码,9.1.2 容器、组件、布局和观感 1.容器(Container)和组件(Component) 一个Java的图形用户界面的最基本元素是组件,组件是可以以图形化的方式显示在屏幕上并能与用户进行交互的对象,如一个按钮、一个文本框等。 容器实际上是一种具有容纳其他组件和容器的功能的组件。抽象类Container是所有容器的父类,其中包含了很多有关容器的功能和方法。而类Container又是Java语言的组件类Component的子类。,2.布局管理器(Layout Manager) 为了使得图形用户界面具有良好的平台无关性,在Java语言中提
6、供了布局管理器这个工具来管理组件在容器中的布局,而不使用直接设置组件位置和大小的方式。容器中的组件定位由布局管理器决定。每个容器都有一个缺省的布局管理器,当容器需要对某个组件进行定位或判断其大小尺寸时,就会调用其相应的布局管理器。但也可以不用缺省的布局管理器,在程序中指定其新的布局管理器。 Java平台提供多种布局管理器,常用的有FlowLayout、BorderLayout、 GridLayout、CardLayout、BoxLayout和GridBagLayout等。使用不同的布局管理器,组件在容器上的位置和大小都是很不一样的。,在程序中安排组件的位置和大小时,应该注意: (1)容器中的布
7、局管理器负责各个组件的大小和位置。因此用户无法在这种情况下直接设置这些属性。若试图使用Java语言提供的setLocation()、setSize()、setBounds()等方法,则都会被布局管理器覆盖。 (2)若用户确实需要亲自设置组件的位置和大小,则应取消该容器的布局管理器,方法为: setLayout(null); 随后,用户必须使用setLocation()、setSize()、setBounds()等方法为组件设置大小和位置,但这种方法将会导致程序的系统相关。 在一个GUI应用程序的界面上,除了可以见到上述的标准GUI元素外,还可以见到一些非交互的起到装饰、美化界面的作用的几何图形
8、、图案、图像等内容。,3.观感(Look and Feel) Java swing的一个重要特征是它的可插入的“观感”体系。一个Swing应用程序或一个最终用户可指明所需要的观感,使得Swing应用程序的外观和行为都可以被定制。Swing运行一个缺省的Java观感(也称为Metal观感),还实现了模仿Motif和Windows的观感。这样,一个Swing程序可拥有Java程序的独特外观,也可以拥有熟悉的Windows操作系统外观。 在本章稍后部分的单选按钮的程序例中分别显示了Windows、Motif和Metal三种不同风格的观感。 一般在应用程序的JFrame的构造方法中或在JApplet的
9、init()方法中进行观感的设置。,9.1.3事件处理(重要) 在一个GUI程序中,为了能够接收用户的输入、命令的按键和鼠标操作,程序系统首先应该能够识别这些操作并做出相应的响应。通常一个键盘和鼠标操作将引发一个系统预先定义好的事件,用户程序只要编写代码定义每个事件发生时程序应做出何种响应即可。这些代码会在它们对应的事件发生时由系统自动调用,这就是GUI程序中事件和事件响应的基本原理。 如果用户通过用户界面执行了一个动作,这将导致一个事件的发生。事件是描述用户所执行操作的数据对象。在Java中,定义了各种不同类型的事件类,用来描述各种类型的用户操作。,事件是由事件源产生的,事件的产生者称为事件
10、源。例如,在Button组件上点击鼠标会产生以这个Button为源的一个事件:ActionEvent。 事件的行为多种多样,由不同的事件监听器处理,编写事件处理程序首先应确定关注的事件属于何种监听器类型,确定后对该监听器进行注册.当事件源产生了一个事件以后,该事件就委托给已经注册的事件监听器,事件监听器监听到事件后,负责执行相应的响应方法。 一个事件监听器是一个实现了给定接口的类的实例,接口中定义了相应的响应方法。,在AWT中,提供11种标准的监听器类型,见下表。 监听器 适配器类 注册方法 ActionListener addActionListener AdjustmentListener
11、 addAdjustmentListener ComponentListener ComponentAdapter addComponentListener ContainerListener ContainerAdapter addContainerListener FocusListener FocusAdapter addFocusListener ItemListener addItemListener KeyListener KeyAdapter addKeyListener MouseListener MouseAdapter addMouseListener MouseMotio
12、nListener MouseMotionAdapter addMouseMotionListener TextListener addTextListener WindowListener WindowAdapter addWindowListener,在确定监听器类型后,要用事件源类的注册方法来注册一个监听器类的对象。这样,事件源产生的事件会传送给已注册的处理该类事件的监听器对象,该对象将自动调用相应的事件处理方法来处理该事件。 具体的注册方法是:用监听器类的对象作为参数调用事件源本身的addXxxListener()方法。该方法的参数是一个监听器类的对象,有多种形式。例如: (1)分离的
13、监听器类,该类通常为继承相应事件适配器类的子类,类中包含了事件处理方法。参数是该类的一个对象。参见例 (2)实现监听器接口,参数为this,表示本对象就是一个监听器类的对象。在本类中包含事件处理方法。如课本例9.1 (3)有名内部类,参数形式为继承事件适配器类的子类对象,在子类中包含事件处理方法。 (4)匿名内部类,参数形式为用new开始的一个无名的类定义。其中包含事件处理方法。,我们可以通过以下方法来注册事件监听器对象: eventSourceObject.addEventListener(eventListenerObject); 以按钮类为例: MyActionListener list
14、ener = ; Button btn = new Button(“提交”); btn.addActionListener(listener); 事件监听器对象listener所属的类MyActionListener必须实现相应的接口,以响应事件: public class MyActionListener implements ActionListener public void actionPerformed(ActionEvent evt) /相应的响应操作 ,9.2 布局管理器,在容器中所有组件的布局(位置和大小)由布局管理器来控制。在Java语言中提供了FlowLayout、Bord
15、erLayout、GridLayout、CardLayout和GridBagLayout等多种布局管理器。 每种容器都有自己缺省的布局管理器。缺省地,JPanel使用FlowLayout,而内容窗格 ContentPane (JApplet、JDialog和JFrame对象的主容器) 使用BorderLayout。如果不希望使用缺省的布局管理器,则可使用所有容器的父类Container的setLayout()方法来改变缺省的布局管理器。,1.FlowLayout FlowLayout布局是一种最基本的布局。这种布局指的是把组件一个接一个从左至右、从上至下地依次放在容器上,每一行中的组件缺省为居
16、中对齐。当容器的尺寸改变后,组件的大小不变,但布局将会随之变化。 FlowLayout是Applet和JPanel的缺省布局管理器。FlowLayout类的构造方法如下: FlowLayout() 创建每行组件对齐方式为居中对齐、组件间距为5个像素单位的对象 FlowLayout(int align) 创建指定每行组件对齐方式、组件间距为5个像素单位的对象,align可取三个静态常量LEFT、CENTER和RIGHT之一(分别表示左、中、右对齐方式)。,FlowLayout(int align, int hgap, int vgap) 创建指定每行组件对齐方式的对象,该对象也使用参数vgap和
17、hgap指定了组件间的以像素为单位的纵横间距。 向使用FlowLayout布局的容器添加组件可简单地使用下面的语句: add(组件名); 例:import java.awt.*; public class MyFlowLayout public static void main(String args) Frame f=new Frame(); f.setLayout(new FlowLayout(); Button b1=new Button(“Fisrt“); Button b2=new Button(“Seconed“); Button b3=new Button(“Third“); f
18、.add(b1);f.add(b2);f.add(b3); f.setSize(300,100);f.setVisible(true); ,2BorderLayout BorderLayout 是内容窗格的缺省布局管理器。内容窗格是框架JFrame,小程序JApplet和对话框JDialog的主容器。BorderLayout将容器的布局分为五个区:北区、南区、东区、西区和中区。这几个区的分布规律是“上北下南,左西右东”。当容器的大小改变时,容器中的各个组件相对位置不变,其中间部分组件的尺寸会发生变化,四周组件宽度固定不变。,BorderLayout类的构造方法如下: BorderLayout(
19、) 创建组件间无间距的BorderLayout对象。 BorderLayout(int hgap, int vgap) 创建有指定组件间距的对象。 向BorderLayout布局的容器添加组件时,每添加一个组件都应指明该组件加在哪个区域中。add()方法的第二个参数指明加入的区域,区域东南西北中可用五个静态常量表示:BorderLayout.EAST、BorderLayout.SOUTH、BorderLayout.WEST、BorderLayout.NORTH和BorderLayout.CENTER。,【例9.3】将五个按钮加入BorderLayout的五个区。 import java.awt
20、.*; 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(“南South“), BorderLayout.SOUTH); c.add(new Button(“东East“), BorderLayout.EAST); c.add(new Button(“西West“), Borde
21、rLayout.WEST); c.add(new Button(“中Center“), BorderLayout.CENTER); 程序运行的结果见下图。,3GridLayout GridLayout布局是将容器的空间分成若干行和列的一个个网格,可以给出网格的行数和列数,组件添加到这些网格中。当改变容器的大小后,其中的组件相对位置不变,但大小改变。容器中各个组件同高度、同宽度。各个组件缺省的排列方式为:从上到下,从左到右。 GridLayout类的构造方法如下: public GridLayout()创建单行每个组件一列的GridLayout对象。 public GridLayout(int
22、rows, int cols) 创建指定行列数的GridLayout对象。 public GridLayout(int rows, int cols, int hgap, int vgap)创建指定行列数的GridLayout对象。,因为没有容器缺省使用GridLayout,因此在使用GridLayout前,要用setLayout()方法将容器的布局管理器设置为GridLayout。 在向GridLayout添加组件时,组件加入容器要按序进行,每个网格中都必须加入组件,若希望某个网格为空,可以为该网格加入一个空的标签:add(new JLabel()。,import java.awt.*; i
23、mport java.applet.*; public class Calc extends Applet Button button0= new Button(“0“); Button button1= new Button(“1“); Button button2= new Button(“2“); Button button3= new Button(“3“); Button button4= new Button(“4“); Button button5= new Button(“5“); Button button6= new Button(“6“); Button button7=
24、 new Button(“7“); Button button8= new Button(“8“); Button button9= new Button(“9“); Button buttonAdd= new Button(“+“); Button buttonSubtract= new Button(“-“); Button buttonMultiply= new Button(“*“); Button buttonDivide= new Button(“/“); Button buttonEqual= new Button(“=“); TextField textField = new
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学习 导读 首先 我们 一些 基本 图形 编程 知识 包括 窗口
链接地址:https://www.31doc.com/p-3259853.html