GUI
GUI 工具集(了解)
AWT
- 本地平台捆绑,依靠本地系统决定组件外观和功能,重量级组件
SWING
-
大多Swing组件不依赖本地窗口部件们可以在每个平台实现每个窗口部件。
-
缺省的情况下采用本地平台的显示外观
-
不依赖于底层平台的Swing组件,称为轻量级组件
SWT
- 吸收了AWT 和 Swing实现的最好部分,保证了与本地窗口部件相当的外观和响应度
区别
- AWT、SWT依赖底层平台,不同操作系统显示效果不一样
- Swing 基于 AWT 架构之上,保持了平台独立的特点
- AWT 和 SWT有对本地组件的引用,必须正确释放这些引用
组件分类(了解)
顶层容器
JFrame, JApplet, JDialog, JWindow
这四个组件被称为重量级组件
根面板结构(了解)
- 玻璃面板: 默认不可见。接受鼠标键盘等响应事件
- 内容面板: 一个可见的容器,不包括菜单条
- 工具条: 可选组件
- 分层面板:定位内容面板和菜单条
可插入式外观
- Swing将组建和组建绘制相分离,因此可以动态改变外观不影响程序功能
- UI为结尾的类,是Swing组建提供用户界面的,实际上是进行组件绘制的类
- LookAndFeel子类提供了构建特定外观的全局信息,包括颜色,字体,边框等。
UIManager
-
包含嵌套类LookAndFeelInfo来维护外观信息
-
调用UIManager类的setLookAndFeel来设定当前外观
looks = UIManager.getInstalledLookAndFeels() UIManager.setLookAndFeel(looks[value ].getClassName()) SwingUtilities.updateComponentTreeUI(this)
事件处理机制
事件处理机制包含三个部分
- 事件源 与用户进行交互的某个GUI组件
- 事件对象 事件的信息例如 ActionEvent 包含在 java.awt.event包中 是类AWTEvent或其子类的示例对象
- 监听器 接受事件对象,并处理事件对象
JButton btn = new JButton("按钮") // btn 代表事件源
btn.addActionListener(new ActionListener() {
@Override
public void ActionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
})
// 上面的匿名内部类为监听器
// ActionEvent 为事件对象
事件监听器接口与事件监听器(了解)
- 事件的处理方法都被定义在继承了 java.util.EventListener 类的 EventListener 接口中
- 任何一个类想操作EventListener接口中定义的方法,都必须实现这个接口,也就是成为事件监听者
GUI事件处理关键过程
- 为将要产生事件的组件注册监听者 (addActionListner)
- 为监听者实现事件处理的方法 (ActionPerformed)
java事件类型(了解)
- java.awt.event中定义的事件类型同时为AWT和Swing组件所使用
- 一些新的Swing组件事件类型被定义在javax.swing.event中
事件
ActionEvent
一些方法
ActionEvent e;
e.getSource(); // 获得事件源对象的引用
e.getActionCommand(); // 获得文本框中数的文本
ItemEvent
一些方法
ItemEvent e;
e.getStateChange(); // 获得是选中还是未选中
// 例如 e.getStateChange() === ItemEvent.SELECTED // 表示选中
ListSelectionEvent
一些方法
ListSelectionEvent e;
changeEvent
一些方法
changeEvent e;
MouseEvent
一些方法
mouseEvent e;
e.getX();
e.getY(); // 鼠标x,y坐标
e.isPopupTrigger() // 鼠标右键
/**
Pane.addMouseListener(new MouseListener() {
})
pane.addMouseMotionListener(new MouseMotionListner(){
})
// 第一个主要是一些瞬发的事件 有 mouseClickd 等五个方法
// 第二个主要是移动 有 mouseMoved mouseDragged 两个方法
*/
// 由于这些接口内方法太多,有时候只要一个方法要写很多没用的方法,怎么办
// 适配器类
// MouseListener -> MouseAdpater
e.getClickCount(); // 鼠标单击次数
e.getMetaDown(); // 右键
e.getAltDown(); // 中键
// 以上两个都不是那么就是左键
KeyEvent
Pane.addKeyListener(new KeyListner() {
// ....
})
1. keyPressed() // 任意键按下
2. keyTyped(); // 不为动作键按下
3. keyReleased(); // 任意键松开
KeyEvent e;
e.getKeyCode();
e.getKeyChar();
e.geyKeyText(e.getKeyCode());
组件
JFrame
特点
-
是具有标题栏和边框的窗口
-
JFrame是 java.awt.Frame 的子类
-
JFrame不完全是由Java编写的
-
窗口是本地平台的窗口显示工具集提供的,不同平台窗口将有所不同的
构造方法
public JFrame()
public JFrame(String title)
内部方法
JFrame f = new JFrame("示例");
f.setSize(100, 200); // width and height
f.setVisible(true); // 显示窗口
f.setLocationRelativeTo(null); //设置居中
f.setDefaultCloseOperation(EXIT_ON_CLOSE);
// 可以选择
EXIT_ON_CLOSE 退出
HIDE_ON_CLOSE 隐藏
DO_NOTHING_ON_CLOSE 什么都不做(关不掉了)
f.setLayout(new FlowLayout());
// 可以选择各种布局
// 这些布局一般都在 java.awt包内
f.add(Component c)