Swing
概念引入
要想产生交互效果,就需要了解awt,swing的事件处理机制
事件对象:事件对象主要回答发生了什么事情。事件对象本身封装了包含所发生的各种事件的有效信息,包括事件源对象以及处理该事件所需要的其它 各种信息(如鼠标点击时的坐标等),这些有效信息 被封装在类AWTEvent或其子类的实例对象中。
事件源:事件源回答事件是由谁发生的,也就是事 件发生的场所或者来源,通常是组件的对象,例如按钮JButton、下拉框JComboBox、列表框JList、 树JTree等。
事件监听器:事件监听器主要回答当某个事件发生 由谁处理以及怎么处理。一旦注册完成一个事件监听器,它将能接受事件对象并进行处理。
比如 点击按钮,弹出HelloWord
那么 事件是 点击按钮 ,事件源就是按钮,事件处理器就会弹出对话框,显示HelloWord.
常用的事件(Event) 有:
**所有事件类均在java.awt.event包中 **
-
鼠标事件(MouseEvent: 鼠标按下,移入,移除,滚轮..)
-
键盘事件(KeyEvent: 键盘按下,释放..)
-
动作事件( ActionEvent:当按钮、菜单项被点击,在JTextField中按Enter键时...触发该事件。)按钮添加接收器, 不同的事件,接收器不同.
ActionEvent 那么他的接收器是ActionListener
KeyEvent 那么他的接收器就是KeyListener
每种类型的事件,都定义了相应的事件处理(监听器)接口,
其命名规则是XXXEvent事件对应的事件处理(监听器)接口通常命名为XXXListener
常用事件接口与对应方法
***要编写一个完整的事件处理程序,通常包含如下四部分的内容: *** ①引入系统事件类包:
import java.awt.event.*
②自定义事件处理类,即加上implements XXXListener, 如:
public class MyFrame implements ActionListener { … }
③注册事件源对象的监听者,即告诉程序一旦发生相应的事件后,由谁处理,如:
public class MyFrame extends JFrame implements ActionListener{
MyFrame(String sTitle){
super(sTitle);
JButton btn=new JButton("确定"); …
btn.addActionListener (this); …
}
}
这个例子中,btn.addActionListener(this)即注册监听者,它相当于宣布一旦发生点击事件(ActionEvent,对应的事件监听器接口为 ActionListener,而MyFrame已经implements了该接口)由this处理,this即为MyFrame。
④注册了监听者还不能响应相应的事件,还需要实现监 听器接口中的所有方法。例如,在上例中,需加入如下 代码:
//实现ActionListener接口中的方法
public void actionPerformed(ActionEvent e) { ...//响应某个动作的代码... }
布局管理器
除了BoxLayout位于javax.swing包中,其余5种布局管理器均位于java.awt包中。
FlowLayout 流式布局
- 是一种最基本的布局管理器
- 是 java.awt.Applet、java.awt.Panel 和 javax.swing.JPanel的默认布局方式
- 在容器中,从左到右依次放置GUI组件
- 当组件排到容器一行的末尾时,则从下一行开始接着 排列组件
- 每行组件的对齐方式可以是: 左对齐、中间(默认对齐 方式)和右对齐
BorderLayout 边界布局
- 将容器分为5个区域
- NORTH 顶部 SOUTH 底部 WEST ESAST CENTE
- 是容器JFrame和JApplet的默认布局方式
- 每个区域最多只能1个组件
BoxLayout 盒式布局管理器(了解)
-
创建一个将沿给定轴放置组件的布局管理器。
BoxLayout(Container target, int axis)
BoxLayout.X_AXIS:指定组件应该从左到右放置
BoxLayout.Y_AXIS:指定组件应该从上到下放置
GridLayout 网格布局
- 布局管理器GridLayout按行与列将容器等分成网格
- 每个组件占用具有相同宽度和高度的网格
- 添加组件占用网格的顺序: 从上到下,从左到右
- 当一行满了,则继续到下一行,仍然是从左到右
CardLayout 卡片布局(了解)
- 一个组件压在另一个组件的上面,所以每次一般只能看 到一个组件
GridBagLayout 网格包布局(了解)
-
GridBagLayout是AWT包中提供的最灵活、最 复杂的布局管理器。
-
GridBagLayout将组件以多行多列放置,允许 指定的组件跨多行或多列。
-
每个 GridBagLayout 对象保留一个动态的矩形 单元网格,每个组件占用一个或多个单元,称 为它的显示区域。
-
每个由一个网格包布局管理的组件都与一个 GridBagConstraints的实例相关,它指定了组件 在它的显示区域是如何放置的
容器变化时,布局的变化规律
- FlowLayout:容器大小发生变化,组件的大小不变,但是相对位置会发生变化。
- BorderLayout, GridLayout:容器的大小发生变化, 组件的相对位置不变,大小发生变化。
- BoxLayout:容器的大小发生变化时,组件占用的空间不会发生变化。