core java 8~9(GUI & AWT事件处理机制)

时间:2021-11-26 13:50:48

MODULE 8 GUIs
--------------------------------
GUI中的包:
java.awt.*;
javax.swing.*;
java.awt.event.*;

要求:
1)了解GUI的开发流程;
2)掌握常用的布局管理器

开发GUI图形界面的步骤
-------------------------------
1.选择容器
1)Frame容器
有缩小/最大化/关闭等按钮,顶层容器
2)Dialog对话框
通常依赖于容器,不单独出现
3)Applet 依赖于浏览器的支持,已淘汰
4)Panel 轻量级小容器
没有缩小/最大化/关闭等按钮,通常一个大的容器需要设置多种排列风格时,将大容器切割成多个小容器,每个小容器添加自己独有的风格。没有滚动条
5)ScrollPane 带有滚动条的小容器

2.给容器设置布局管理器
布局管理器决定了容器组件的排列风格
1)setLayout(布局管理器) 设置布局管理器
2)可以通过组件的setLocation() setBounds()等方法设置组件在容器当中的位置,大小,以及和容器的边界等
3)所有容器都有默认的布局管理器
Window 默认为BorderLayout,Frame容器与之相同
Panel 默认为FlowLayout

3.往容器中添加组件
1)创建组件对象
Button b=new Button("Add");
2)向容器中添加组件
add(b);

4.创建事件监听器
给每个组件添加相应的时间处理代码
westBtn.addActionListener(new ActionListener(){
public void Performed(ActionEvent e){
centerArea.setText(centerArea.getText()+westTxt.getText()+"\n");
westTxt.setText("");
}
});

创建容器的两种方式
1)将JFrame作为成员变量
2)可以继承JFrame

常见的布局管理器
------------------------
1.flowlayout 流式布局管理
组件按行排列,一行排不下或窗口改变会自动换行排列

2.BorderLayout
将容器分为五大区域:
BorderLayout.CENTER
BorderLayout.EAST
BorderLayout.WEST
BorderLayout.SOUTH
BorderLayout.NORTH
每个区域只能放一个组件,且该组件充满整个区域
若改变窗口大小,只有CENTER区域会跟随改变,其他区域不变

练习:BorderLayoutEx.java

3.GridLayout 网格布局管理器
将容器划分为若干行若干列大小相同的网格,每个网格只允许放一个组件,且该组件充满网格
对组件调整大小无意义

4.CardLayout 卡片状布局管理器
设置多个卡片,每个卡片只能放一个组件,且该组件充满整个区域

JFC
提供了通用的类库开发图形界面,操作系统无关

组成:AWT Java2D Accessebility Drag and Drop, Swing

MODULE 9 AWT事件处理机制
--------------------------------
按钮 点击 产生响应
事件源(触发)点击事件(给)事件监听器===> 执行响应代码

三要素:
Event Source:事件源
操作的组件,如按钮等,会产生事件
Event Object:事件对象
组件身上触发的事件对象,如鼠标单击,将动作包装成对象
Event Listener:事件监听器
负责对不同事件源发来的事件进行响应

例:

分析:
1)事件源要维护一个监听器列表,产生的事件传递个这些监听器
2)事件对象身上要携带有事件源的信息
3)事件监听器要知道事件源,并根据不同的事件源做不同的响应

情绪模型
----------------
女孩 产生 情绪事件 发送给 男孩子们

Girl 事件源
1)负责产生情绪事件happy()/sad(),把情绪传递给所有对她感兴趣的男孩子
2)要维护一个男孩子列表,记录所有对她感兴趣的男孩
3)提供相应的方法允许注册监听器或删除监听器

EmotionEvent 事件对象
情绪事件要携带有Girl的信息

Boy 监听器
对不同的Girl发来的情绪事件作出不同的反应

适配器Adapter
-----------------------------------
设计原因:
采用实现事件监听器接口的 方式编写事件处理代码时 ,必须对该接口中的所有事件提出实现(很多事件不会用到)。考虑简化该方式:适配器类

原有的:MouseListener接口: