JAVA GUI 学习总结(1)

300 阅读4分钟

JAVA GUI 学习笔记

一、java提供的图形界面包的框架

  • 其中,右边那一栏的组件之中不能再添加组件,而左边一栏Container的组件之中还可以包含组件。
  • Panel组件可以用于对界面进行划分,比如说将一个Frame上半部划分为流水式布局,下半部分划分为网格式布局,则需要两个panel组件,并分别设置panel的布局为流式布局和网格布局。

二、开发图形化界面的步骤

  • 1 . 创建frame窗体
  • 2 . 设置frame窗体,包括位置,颜色,长宽,布局。
  • 3 . 定义将要在窗体中显示的组件
  • 4 . 调用frame的add方法将组件添加进窗体
  • 5 . 调用frame的setVisable(true)显示窗体
  • 示例代码如下:
    public class guiTest {
    //窗口工具包有AWT,SWING
    //AWT依赖于本地系统功能,属于重量级,依赖于平台,可移植性不如swing
    //Swing完全由java编写,属于轻量级,跨平台
    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);
    }
}

  • 同时我们对frame设置监听器对象:
    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类中有专门的设置鼠标和键盘监听器的方法:

①鼠标事件

  • MouseListener接口的方法如下:

  • 实现:
    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("按下键盘");
            }
        });
  • 效果