十. 图形界面(GUI)设计1.图形界面设计基础
早先程序使用最简单的输入输出方式,用户在键盘输入数据,程序将信息输出在屏幕上。现代程序要求使用图形用户界面(Graphical User Interface,GUI),界面中有菜单、按钮等,用户通过鼠标选择菜单中的选项和点击按钮,命令程序功能模块。本章学习如何用Java语言编写GUI科学试验,如何通过GUI实现输入和输出。
AWT和Swing
先前用Java编写GUI程序,是使用抽象窗口工具包AWT(Abstract Window Toolkit).现在多用Swing。Swing可以看作是AWT的改良版,而不是代替AWT,是对AWT的提高和扩展。所以,在写GUI程序时,Swing和AWT都要作用。它们共存于Java基础类(Java Foundation Class,JFC)中。
尽管AWT和Swing都提供了构造图形界面元素的类,但它们的重要方面有所不同:AWT依赖于主平台绘制用户界面组件;而Swing有自己的机制,在主平台提供的窗口中绘制和管理界面组件。Swing与AWT之间的最明显的区别是界面组件的外观,AWT在不同平台上运行相同的程序,界面的外观和风格可能会有一些差异。然而,一个基于Swing的应用程序可能在任何平台上都会有相同的外观和风格。
Swing中的类是从AWT继承的,有些Swing类直接扩展AWT中对应的类。例如,JApplet、JDialog、JFrame和JWindow 早先程序使用最简单的输入输出方式,用户在键盘输入数据,程序将信息输出在屏幕上。现代程序要求使用图形用户界面(Graphical User Interface,GUI),界面中有菜单、按钮等,用户通过鼠标选择菜单中的选项和点击按钮,命令程序功能模块。本章学习如何用Java语言编写GUI科学试验,如何通过GUI实现输入和输出。
AWT和Swing
先前用Java编写GUI程序,是使用抽象窗口工具包AWT(Abstract Window Toolkit).现在多用Swing。Swing可以看作是AWT的改良版,而不是代替AWT,是对AWT的提高和扩展。所以,在写GUI程序时,Swing和AWT都要作用。它们共存于Java基础类(Java Foundation Class,JFC)中。
尽管AWT和Swing都提供了构造图形界面元素的类,但它们的重要方面有所不同:AWT依赖于主平台绘制用户界面组件;而Swing有自己的机制,在主平台提供的窗口中绘制和管理界面组件。Swing与AWT之间的最明显的区别是界面组件的外观,AWT在不同平台上运行相同的程序,界面的外观和风格可能会有一些差异。然而,一个基于Swing的应用程序可能在任何平台上都会有相同的外观和风格。
Swing中的类是从AWT继承的,有些Swing类直接扩展AWT中对应的类。例如,JApplet、JDialog、JFrame和JWindow www.jimeiyulept.com 。
使用Swing设计图形界面,主要引入两个包:
- javax.swing包:包含Swing的基本类;
- java.awt.event包:包含与处理事件相关的接口和类。
由于Swing太丰富,不可能在一本教科书中给出Swing的全面介绍,但本章所介绍的有关Swing的知识,已足以让读者编写相当精美的GUI程序。
组件和容器
组件(component)是图形界面的基本元素,用户可以直接操作,例如按钮。容器(Container)是图形界面的的复合元素,容器可以包含组件,例如面板。
Java语言为每种组件都预定义类,程序通过它们或它们的子类各种组件对象,如,Swing中预定义的按钮类JButton是一种类,程序创建的JButton对象,或JButton子类的对象就是按钮。Java语言也为每种容器预定义类,程序通过它们或它们的子类创建各种容器对象。例如,Swing中预定义的窗口类JFrame是一种容器类,程序创建的JFrame或JFrame子类的对象就是窗口。
为了统一管理组件和容器,为所有组件类定义超类,把组件的共有操作都定义在Component类中。同样,为所有容器类定义超类Container类,把容器的共有操作都定义在Container类中。例如,Container类中定义了add()方法,大多数容器都可以用add()方法向容器添加组件。
Component、Container和Graphics类是AWT库中的关键类。为能层次地构造复杂的图形界面,容器被当作特殊的组件,可以把容器放入另一个容器中。例如,把若干按钮和文本框分放在两个面板中,再把这两个面板和另一些按钮放入窗口中。这种层次地构造界面的方法,能以增量的方式构造复杂的用户界面。
事件驱动程序设计基础
1.事件、监视器和监视器注册
图形界面上的事件是指在某个组件上发生用户操作。例如,用户单击了界面上的某个按钮,就说在这个按钮上发生了事件,这个按钮对象就是事件的击发者。对事件作监视的对象称为监视器,监视器提供响应事件的处理方法。为了让监视器与事件对象关联起来,需要对事件对象作监视器注册,告诉系统事件对象的监视器。
以程序响应按钮事件为例,程序要创建按钮对象,把它添加到界面中,要为按钮作监视器注册,程序要有响应按钮事件的方法。当“单击按钮”事件发生时,系统就调用已为这个按钮注册的事件处理方法,完成处理按钮事件的工作。
2.实现事件处理的途征
java语言编写事件处理程序主要有两种方案:一个是程序重设handleEvent(Eventevt),采用这个方案的程序工作量稍大一些;另一个方案是程序实现一些系统设定的接口。java按事件类型提供多种接口,作为监视器对象的类需要实现相应的接口,即实现响应事件的方法。当事件发生时,系统内设的handleEvent(Event evt)方法就自动调用监视器的类实现的响应事件的方法。
java.awt.event包中用来检测并对事件做出反应的模型包括以下三个组成元素:
- 源对象:事件“发生”这个组件上,它与一组“侦听”该事件的对象保持着联系。
- 监视器对象:一个实现预定义的接口的类的一个对象,该对象的类要提供对发生的事件作处理的方法。
- 事件对象:它包含描述当事件发生时从源传递给监视器的特定事件的信息。
一个事件驱动程序要做的工作除创建源对象和监视器对象之外,还必须安排监视器了解源对象,或向源对象注册监视器。每个源对象有一个已注册的监视器列表,提供一个方法能向该列表添加监视器对象。只有在源对象注册了监视器之后,系统才会将源对象上发生的事件通知监视器对象。
3.事件类型和监视器接口
在java语言中,为了便于系统管理事件,也为了便于程序作监视器注册,系统将事件分类,称为事件类型。系统为每个事件类型提供一个接口。要作为监视器对象的类必须实现相应的接口,提供接口规定的响应事件的方法。
再以程序响应按钮事件为例,JButton类对象button可以是一个事件的激发者。当用户点击界面中与button对应的按钮时,button对象就会产生一个ActionEvent类型的事件。如果监视器对象是obj,对象obj的类是Obj,则类Obj必须实现AWT中的ActionListener接口,实现监视按钮事件的actionPerformed方法。button对象必须用addActionListener方法注册它的监视器obj。
程序运行时,当用户点击button对象对应的按钮时,系统就将一个ActionEvent对象从事件激发对象传递到监视器。ActionEvent对象包含的信息包括事件发生在哪一个按钮,以及有关该事件的其他信息。
表 11-1 给出有一定代表性的事件类型和产生这些事件的部分Swing组件。实际事件发生时,通常会产生一系列的事件,例如,用户点击按钮,会产生ChangeEvent事件提示光标到了按钮上,接着又是一个ChangeEvent事件表示鼠标被按下,然后是ActionEvent事件表示鼠标已松开,但光标依旧在按钮上,最后是ChangeEvent事件,表示光标已离开按钮。但是应用程序通常只处理按下按钮的完整动作的单个ActionEvent事件。
javax.swing包:包含Swing的基本类;。
使用Swing设计图形界面,主要引入两个包:
- java.awt.event包:包含与处理事件相关的接口和类。
由于Swing太丰富,不可能在一本教科书中给出Swing的全面介绍,但本章所介绍的有关Swing的知识,已足以让读者编写相当精美的GUI程序。
组件和容器
组件(component)是图形界面的基本元素,用户可以直接操作,例如按钮。容器(Container)是图形界面的的复合元素,容器可以包含组件,例如面板。
Java语言为每种组件都预定义类,程序通过它们或它们的子类各种组件对象,如,Swing中预定义的按钮类JButton是一种类,程序创建的JButton对象,或JButton子类的对象就是按钮。Java语言也为每种容器预定义类,程序通过它们或它们的子类创建各种容器对象。例如,Swing中预定义的窗口类JFrame是一种容器类,程序创建的JFrame或JFrame子类的对象就是窗口。
为了统一管理组件和容器,为所有组件类定义超类,把组件的共有操作都定义在Component类中。同样,为所有容器类定义超类Container类,把容器的共有操作都定义在Container类中。例如,Container类中定义了add()方法,大多数容器都可以用add()方法向容器添加组件。
Component、Container和Graphics类是AWT库中的关键类。为能层次地构造复杂的图形界面,容器被当作特殊的组件,可以把容器放入另一个容器中。例如,把若干按钮和文本框分放在两个面板中,再把这两个面板和另一些按钮放入窗口中。这种层次地构造界面的方法,能以增量的方式构造复杂的用户界面。
事件驱动程序设计基础
1.事件、监视器和监视器注册
图形界面上的事件是指在某个组件上发生用户操作。例如,用户单击了界面上的某个按钮,就说在这个按钮上发生了事件,这个按钮对象就是事件的击发者。对事件作监视的对象称为监视器,监视器提供响应事件的处理方法。为了让监视器与事件对象关联起来,需要对事件对象作监视器注册,告诉系统事件对象的监视器。
以程序响应按钮事件为例,程序要创建按钮对象,把它添加到界面中,要为按钮作监视器注册,程序要有响应按钮事件的方法。当“单击按钮”事件发生时,系统就调用已为这个按钮注册的事件处理方法,完成处理按钮事件的工作。
2.实现事件处理的途征
java语言编写事件处理程序主要有两种方案:一个是程序重设handleEvent(Eventevt),采用这个方案的程序工作量稍大一些;另一个方案是程序实现一些系统设定的接口。java按事件类型提供多种接口,作为监视器对象的类需要实现相应的接口,即实现响应事件的方法。当事件发生时,系统内设的handleEvent(Event evt)方法就自动调用监视器的类实现的响应事件的方法。
java.awt.event包中用来检测并对事件做出反应的模型包括以下三个组成元素:
- 源对象:事件“发生”这个组件上,它与一组“侦听”该事件的对象保持着联系。
- 监视器对象:一个实现预定义的接口的类的一个对象,该对象的类要提供对发生的事件作处理的方法。
- 事件对象:它包含描述当事件发生时从源传递给监视器的特定事件的信息。
一个事件驱动程序要做的工作除创建源对象和监视器对象之外,还必须安排监视器了解源对象,或向源对象注册监视器。每个源对象有一个已注册的监视器列表,提供一个方法能向该列表添加监视器对象。只有在源对象注册了监视器之后,系统才会将源对象上发生的事件通知监视器对象。
3.事件类型和监视器接口
在java语言中,为了便于系统管理事件,也为了便于程序作监视器注册,系统将事件分类,称为事件类型。系统为每个事件类型提供一个接口。要作为监视器对象的类必须实现相应的接口,提供接口规定的响应事件的方法。
再以程序响应按钮事件为例,JButton类对象button可以是一个事件的激发者。当用户点击界面中与button对应的按钮时,button对象就会产生一个ActionEvent类型的事件。如果监视器对象是obj,对象obj的类是Obj,则类Obj必须实现AWT中的ActionListener接口,实现监视按钮事件的actionPerformed方法。button对象必须用addActionListener方法注册它的监视器obj。
程序运行时,当用户点击button对象对应的按钮时,系统就将一个ActionEvent对象从事件激发对象传递到监视器。ActionEvent对象包含的信息包括事件发生在哪一个按钮,以及有关该事件的其他信息。
表 11-1 给出有一定代表性的事件类型和产生这些事件的部分Swing组件。实际事件发生时,通常会产生一系列的事件,例如,用户点击按钮,会产生ChangeEvent事件提示光标到了按钮上,接着又是一个ChangeEvent事件表示鼠标被按下,然后是ActionEvent事件表示鼠标已松开,但光标依旧在按钮上,最后是ChangeEvent事件,表示光标已离开按钮。但是应用程序通常只处理按下按钮的完整动作的单个ActionEvent事件。
| 事件类型 | 组件 | 描述 |
|---|---|---|
| ActionEvent | JButton,JCheckBox JComboBox,JMenuItem JRadioButton |
点击、选项或选择 |
| ChangeEvent | JSlider | 调整一个可移动元素的位置 |
| AdjustmentEvent | JScrollBar | 调整滑块位置 |
| ItemEvent | JComboBox,JCheckBox JRadioButton JRadioButtonMenuItem JCheckBoxMenuItem |
从一组可选方案中选择一个项 目 |
| ListSelectionEvent | JList | 选项事件 |
| KeyEvent MouseEvent |
JComponent 及其派生类 | 操纵鼠标或键盘 |
| CareEvent | JTextArea,JTextField | 选择和编辑文本 |
| WindowEvent | Window 及其派生类 JFrame | 对窗口打开、关闭和图标化 |
每个事件类型都有一个相应的监视器接口,表11-2列出了每个接口的方法。实现监视器接口的类必须实现所有定义在接口中的方法。
| 监视器接口 | 方法 | 获取事件源的方法 |
|---|---|---|
| ActionListener | actionPerformed | getSource,getActionCommand |
| ChangeListener | stateChanged | getSource |
| AdjustmentListener | adjustmentValueChanged | getAdjustable |
| FocusListener | focusGained, focusLost |
|
| ItemListener | itemStateChanged | getItemSelectable(),getSource() |
| ListSelectionListener | valueChanged | e.getSource().getSelectedValue() |
| KeyListener | keyPressed, keyReleased, keyTyped |
|
| CareListener | careUpdate | |
| MouseListener | mouseClicked, mouseEntered, mouseExited, mousePressed, mouseReleased |
|
| MouseMontionListener | mouseDragged, mouseMoved |
|
| WindowListener | windowClosed, windowClosing, windowDeactivated, windowDeiconified, windowIconified, windowOpened |
十. 图形界面(GUI)设计1.图形界面设计基础的更多相关文章
- 十. 图形界面(GUI)设计3.标签、按钮和按钮事件
标签和按钮也许是图形界面中最常见的两种组件,按钮又总是与激发动作事件有关. 标签 标签(JLabel)是最简单的Swing组件.标签对象的作用是对位于其后的界面组件作说明.可以设置标签的属性,即前景色 ...
- 十. 图形界面(GUI)设计2.框架窗口
窗口是GUI编程的基础,小应用程序或图形界面的应用程序的可视组件都放在窗口中,在GUI中,窗口是用户屏幕的一部分,起着在屏幕中一个小屏幕的作用.有以下三种窗口: Applet窗口:Applet类管理这 ...
- 十. 图形界面(GUI)设计6.文本框和文本区
在图形界面中,文本框和文本区是用于信息输入输出的组件. 文本框 文本框(JTextField)是界面中用于输入和输出一行文本的框.JTextField类用来建立文本框.与文本框相关的接口是Action ...
- 十. 图形界面(GUI)设计7.文本框和文本区的输入输出
在GUI中,常用文本框和文本区实现数据的输入和输出.如果采用文本区输入,通常另设一个数据输入完成按钮.当数据输入结束时,点击这个按钮.事件处理程序利用getText()方法从文本区中读取字符串信息.对 ...
- 十. 图形界面(GUI)设计5.布局设计
在界面设计中,一个容器要放置许多组件,为了美观,为组件安排在容器中的位置,这就是布局设计.java.awt中定义了多种布局类,每种布局类对应一种布局的策略.常用的有以下布局类: FlowLayout, ...
- 十. 图形界面(GUI)设计12.滚动条
滚动条(JScrollBar)也称为滑块,用来表示一个相对值,该值代表指定范围内的一个整数.例如,用Word编辑文档时,编辑窗右边的滑块对应当前编辑位置在整个文档中的相对位置,可以通过移动选择新的编辑 ...
- 十. 图形界面(GUI)设计11.对话框
对话框是为了人机对话过程提供交互模式的工具.应用程序通过对话框,或给用户提供信息,或从用户获得信息.对话框是一个临时窗口,可以在其中放置用于得到用户输入的控件.在Swing中,有两个对话框类,它们是J ...
- 十. 图形界面(GUI)设计10.菜单
有两种类型的菜单:下拉式菜单和弹出式菜单.本章只讨论下拉式菜单编程方法.菜单与JComboBox和JCheckBox不同,它们在界面中是一直可见的.菜单与JComboBox的相同之处是每次只可选择一个 ...
- 十. 图形界面(GUI)设计9.列表和组合框
列表和组合框是又一类供用户选择的界面组件,用于在一组选择项目选择,组合框还可以输入新的选择. 列表 列表(JList)在界面中表现为列表框,是JList类或它的子类的对象.程序可以在列表框中加入多个文 ...
随机推荐
- virsh command
http://www.cnblogs.com/chenjiahe/category/845519.html resize qemu-img resize win2k8r2.qcow2 40G conv ...
- CMake Tutorial & Example
Tutorial CMakeLists用于告诉CMake我们要对这个目录下的文件做什么事情 cmake 的特点主要有: 1,开放源代码,使用类 BSD 许可发布.http://cmake.org/HT ...
- android自定义控件属性
有两种方法为自定义的控件设置属性 . 来自为知笔记(Wiz)
- 【bzoj5056】OI游戏 最短路+矩阵树定理
题目描述 给出一张无向图,求满足 0号点到所有点的路径长等于原图中它们之间最短路 的生成树的个数. 输入 第一行一个整数N,代表原图结点. 接下来N行,每行N个字符,描绘了一个邻接矩阵.邻接矩阵中, ...
- 【Luogu】P3228数列(数学题)
题目链接 考虑我们把所有的增加量拿出来做成一个序列b. 那么在所有n中开头中$1~\sum\limits_{i=1}^{k-1}b[i]$是合法的 也就是说我们枚举所有b[i],然后答案就是$n*m^ ...
- [hdu6434]Problem I. Count
题目大意:$T(T\leqslant 10^5)$组数据,每组数据给你$n(n\leqslant 2\times 10^7)$,求$\sum\limits_{i=1}^n\sum\limits_{j= ...
- url为什么要编码及php中的中文字符urlencode基本原理
首先了解以下中文字符在使用urlencode的时候运用的基本原理: urlencode()函数原理就是首先把中文字符转换为十六进制,然后在每个字符前面加一个标识符%. 此字符串中除了 -_. 之外的所 ...
- JS实现 java的Map
Map = function () { this.objects = new Object(); // 加入元素 this.put = function (key, value) { this.obj ...
- git项目初始化的问题汇总
转:https://blog.csdn.net/Free_Wind22/article/details/81628721 1.在Git官网上点击New repository新建项目: 2.在本地新建一 ...
- git上导出的maven项目转成正常的Dynamic web project
项目地址:http://git.oschina.net/jiafuwei0407/springmvc,springmvc maven项目 包含日志的测试 restful api 如何在eclipse ...