JAVA GUI 学习笔记
一、java提供的图形界面包的框架
- 其中,右边那一栏的组件之中不能再添加组件,而左边一栏Container的组件之中还可以包含组件。
- Panel组件可以用于对界面进行划分,比如说将一个Frame上半部划分为流水式布局,下半部分划分为网格式布局,则需要两个panel组件,并分别设置panel的布局为流式布局和网格布局。
二、开发图形化界面的步骤
- 1 . 创建frame窗体
- 2 . 设置frame窗体,包括位置,颜色,长宽,布局。
- 3 . 定义将要在窗体中显示的组件
- 4 . 调用frame的add方法将组件添加进窗体
- 5 . 调用frame的setVisable(true)显示窗体
- 示例代码如下:
public class guiTest {
public static void main(String[]args){
awtDemo();
}
public static void awtDemo(){
Frame frame = new Frame("我的窗口");
frame.setSize(500,100);
frame.setLocation(300,200);
Button b = new Button("button");
frame.add(b);
frame.setVisible(true);
}
}
三、操作控件:事件的监听机制
监听事件流程图:
- 1 . 事件源:即awt和swing包里定义的那些组件。
- 2 . 事件:每个事件源可能产生的特有动作或者共性动作。
- 3 . 事件对象:封装事件,包括事件的来源等信息。
- 4 . 监听器:定义了哪些动作可以触发事件
- 我们所要做的事情:对产生的动作和事件进行处理
- 对frame对象添加一个监听器对象,要求这个监听器对象实现WindowListener接口

- 但是当我们并不一定要重写WindowListener的所有方法时,我们可以使用WindowAdapter这个类

- 事实上这个类就是为了方便我们创建监听器对象而设置的
- 它重写了WindowAdapter这个类的所有方法,但是方法内部都为空。
- 同时设置WindowAdapter为抽象类,就是要让程序员可以自主的选择重写WindowAdapter中的哪些方法,方便开发。
- 我们可以写一个监听器类MyListener继承自WindowAdapter,并重写它的windowClosing方法,使界面上的退出按钮可以响应我们的操作,代码如下:
class MyListener extends WindowAdapter{
@Override
public void windowClosing(WindowEvent e) {
System.out.println("退出");
System.exit(0);
}
}
public static void awtDemo(){
Frame frame = new Frame("我的窗口");
frame.setSize(500,100);
frame.setLocation(300,200);
Button b = new Button("button");
frame.add(b);
frame.addWindowListener(new MyListener());
frame.setVisible(true);
}
- 其实创建监听器的方法都是类似的
- 例如,我想给button也设置一个监听器,使其点击后关闭程序
- 那么,我需要查看文档,看看Button类中有没有添加监听器的方法:
- 可以看到,Button可以添加ActionListener监听器:
- 可以看到,ActionListener监听器是一个接口,那么我们再找一找该接口实现的方法,主要寻找看看该接口有没有对应的Adapter以便于我们编写程序
- 该接口只有一个方法,比较简单,故java没有提供适配器Adapter
- 一般来说比较复杂的监听器接口都会提供一个适配器(例如WindowListener有WindowAdapter)
- 最后使用匿名内部类实现button的监听功能:
b.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Button退出");
System.exit(0);
}
});
四、共性事件
- 基本上所有的组件都有对鼠标和键盘的事件进行处理
- component类中有专门的设置鼠标和键盘监听器的方法:
①鼠标事件
b.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
System.out.println("鼠标进入!");
}
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("鼠标连续点击"+e.getClickCount()+"次");
}
});
②键盘事件
b.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
System.out.println("键盘键入字母:"+e.getKeyChar());
}
@Override
public void keyPressed(KeyEvent e) {
System.out.println("松开键盘");
}
@Override
public void keyReleased(KeyEvent e) {
System.out.println("按下键盘");
}
});