聊一聊Java中的GUI编程
l图形用户界面(GUI,Graphical User Interface)使用图形的方式,借助菜单、按钮等标准界面元素和鼠标操作,帮助用户方便地向计算机系统发送指令,启动操作,并将系统运行的结果同样以图形方式显示给用户。图形用户界面操作简单,省去了字符界面用户必须记忆各种命令的麻烦,深受广大用户的喜爱和欢迎。所以学习设计和开发图形用户界面,是应用软件开发人员必修的一课。
图形用户界面的概念
l图形用户界面是一种方便的人机界面。它通过图形的方法,借助菜单、按钮等标准界面元素和鼠标操作,帮助用户方便地向计算机发出命令,启动程序,并将程序的运行结果同样以图形的形式显示给用户。
GUI支持包
lJava语言在java.awt包中提供了大量地进行GUI设计所使用的类和接口,包括绘制图形、设置字体和颜色、控制组件、处理事件等内容,AWT是Java语言进行GUI程序设计的基础。
ljavax.swing包是Java语言提供的第二代GUI设计工具包,它以AWT为基础,在AWT内容的基础上新增或改进了一些GUI组件,使得GUI程序功能更强大,设计更容易、更方便。
AWT
lAbstract Window Toolkit
lJava处理图形用户界面的初始途径。
lAWT库处理图形的方法:把这些元素的创建和行为交给目标平台上的本地GUI工具集进行处理。
l理论上 “一次编写,随处运行”。
l依赖于平台上的组件的能力,不同平台的用户体验有微妙的差异。
l实际上“一次编写,随处调试”。
AWT包中类的继承关系
Swing
lSwing处理图形的方法:采用自行绘制的方式来完成对图形组件的显示。
l不依赖于平台,外观完全一致。
l真正实现了“一次编写,随处运行”。
l在外观的控制上完全取代了AWT。
lSwing没有完全取代AWT:Swing包中的类都是从AWT包中较上层的类继承过来的,仍然沿用AWT提供的事件处理机制。
GUI元素
l组件:由AWT和Swing类所创建的对象。
l容器:能容纳其它组件的组件。
l这好比:池子里有盆,盆里有碗,碗里有勺。不同的组件,按一定的容纳关系构成了整个界面。
l顶层容器
–是Swing界面的最顶层元素,好比:池子。
l顶层容器就是界面中的主窗口,或母窗口。它没有父容器。
最基本的Swing应用程序
import javax.swing.*;
public class T1 extends JFrame
{
public static void main(String[] args)
{
JFrame a = new JFrame(); //创建窗体对象
a.setTitle("OK"); //设置对象属性
a.setSize(400,300);
a.setVisible(true);
}
}
//通过生成JFrame对象,然后在修改它的属性的方式不是很方便。
//常见的做法是继承JFrame类,然后在自己类的构造方法中完成所有
//界面的初始化工作。
JFrame的复杂结构
JFrame的初级用法
lgetContentPane()获得内容面板,然后在其上添加组件。
l不要组件直接加到JFrame对象上。
–ContentPane好比热水瓶的内胆
在面板上加入组件
l最有用的组件:
–JLabel 可以设字体,颜色
–JTextField 可以接受用户输入
–JButton 可以响应用户的点击
–JComboBox 可以下拉列表供选择
–JCheckBox 提供多选按钮
–JRadioButton 提供单选按钮
l每种组件的具体用法参见例程
JPanel
l经常作为中间容器,为可见的组件分组,控制它们的布局关系和显示效果。
lJPanel一般不可见,只是专门作为构造组间关系的过渡容器。
l
常用布局方式
lBorderLayout
–边界布局方式。东西南北中。
lFlowLayout
–象流水一样,塞满第一行,塞第二行
lGridLayout
–网格布局。分割为等大小的格子
设置布局方式
l容器.setLayout(new FlowLayout())
–设为流布局
l默认的布局
–每个容器都有自己的默认布局方式
–JFrame默认的是BorderLayout
–JPanel默认的是 FlowLayout
事件模型
l一次事件的处理,涉及三个对象:事件源对象,事件对象,事件处理者对象。
l事件模型的好处
–事件的“当事人”自己不去处理事件,避免了大量继承的繁冗
处理过程
l每种类型的事件都有一个对应的接口。
l事件处理者(监听器)通常是一个类,该类如果能够处理某种类型的事件,就必须实现与该事件类型相对应的接口。
l事件源对象把某种类型的事件委托给实现了该种事件处理接口的类的对象。以后,当这个事件源对象上发生了该种特定类型的事件时,就会自动去调用事件处理者(监听器)对象中相应的方法。
委托的花样
l一个事件源可以委托多个事件处理者
–当事件发生的时候,执行多个动作
l多个事件源以委托同一事件处理者
–当进入处理方法时,需要判定是哪个事件源的事件
命名的约定
l事件名:XxxEvent
l接口名:XxxListener
l监听器向产生事件的事件源注册,那么事件源与事件处理者就建立了联系。需要委托方法addXxxListener( )
l注册格式:事件源对象. addXxxListener(监听器对象)
l
ActionEvent
l按钮的点击动作
l文本编辑框上的回车动作
l菜单的点击动作
l
lActionListener 接口名
laddActionListener( )
ActionEvent的方法
lgetSource()
–取得事件发生的“事件源”对象
lgetActionCommand()
–取得按钮的标题
–取得菜单项的标题
鼠标事件
lMouseEvent
–鼠标的普通动作
lMouseMotionEvent
–与鼠标的移动有关的事件
我是田先生,一名热爱技术、热爱生活的Java程序员。我为大家准备了一份价值1888元java资料包,V信扫描下面二维码,关注后回复“1888”即可~