一、事件处理的实施
组件.addxxxListener()方法的后台实现机制?
eg.JButton对象包含名为listenerList(监听者列表)的EventListenerList类型的实例变量。
JButton的事件处理对象实现了ActionLister接口中所定义的actionPerformed方法。
二、 事件监听器接口(EventListener Interface)与事件监听器
事件处理方法都被定义在继承了 java.util.EventListener类的 EventListener接口中 。
任何一个类如果想操作在EventListener接口中定义的方法,都必须实现这个接口,也 就是成为事件监听者 。
三、GUI事件处理关键过程
(1) 为将要产生事件的组件注册监听者。具体:调用事件源本身的方法,如 addActionListener(…)方法注册监听者。
(2) 为监听者实现事件处理方法。 具体:实现监听接口中所定义的方法。
四、布局管理
Java提供了几个布局管理器用于定位组件。
FlowLayout(流式布局)、BorderLayout (边界布局)、GridLayout(网格布局) 、BoxLayout(盒式布局)、CardLayout (卡片布局)、GridBagLayout(网格包布局)。
五、FlowLayout布局管理器(流式布局)
是 java.awt.Applet、java.awt.Panel 和 javax.swing.JPanel的默认布局方式。
JPanel(面板容器)默认的布局管理器是 FlowLayout。
每行组件的对齐方式可以是: 左对齐、中间(默认对齐方式)和右对齐。
是 java.awt.Applet、java.awt.Panel 和 javax.swing.JPanel的默认布局方式。
FlowLayout的构造函数有:
FlowLayout( ):生成一个默认的流式布局
FlowLayout(int alignment):可以设定每一 行组件的对齐方式
FlowLayout(int alignment,int horz,int vert):可以设定组件间的水平和垂直距离
类FlowLayout 对齐方法(改变对齐方式):
setAlignment( position_CONSTANT )
FlowLayout.LEFT、FlowLayout.CENTER、FlowLayout.RIGHT
eg.Container container = frame.getContentPane();//获得JFrame的内容面板
FlowLayout layout = new FlowLayout();
container.setLaylout(layout);//设置窗口布局方式
frame.add(container);
leftJButton.addActionListener(
new ActionListener() // 匿名内部类
{
public void actionPerformed( ActionEvent event )
{
layout.setAlignment( FlowLayout. LEFT );
// 将 FlowLayout 的对其方式改为左对齐。
layout.layoutContainer( container );
// 指定 Jframe 应当根据调整后的布局重新安排(刷新),或使用container.validate();
}
} // end anonymous inner class
);
六、BorderLayout布局管理器(边界布局)
是JFrame默认的布局管理器,将组件安排成5个区域(NORTH、SOUTH、EAST、 WEST、CENTER)。
将容器限制成最多包含5个组件,每个区域一个。
位于每个区域中的组件可以是包含其他组件的容器。
BorderLayout所定义的构造函数:
BorderLayout( ):生成默认的边界布局
BorderLayout(int horz,int vert): 可以设定组件间的水平和垂直距离,这两个值默认值为0
添加组件:myContainer.add( component, position )
component –> 需要加入到容器中的组件
positions –> (BorderLayout.NORTH/SOUTH/EAST/WEST/CENTER)
BorderLayout布局中,当四周区域都没有组件的时候,CENTER区域会占满四周的空间。
七、GridLayout布局管理器(网格布局)
GridLayout的构造函数如下:
GridLayout():生成一个单列的网格布局
GridLayout(int row,int col):生成一个设定行数和列数的网格布局
GridLayout(int row, int col, int horz, int vert):可以设置组件之间的水平和垂直间隔
eg.frame.setLayout(new GridLayout(2,3));
八、CardLayout布局管理器
CardLayout的布局方式有点象码“扑克牌”。
一个组件压在另一个组件的上面,所以每次一般只能看到一个组件。