【Java之GUI 01】

  • GUI:图形用户界面

用图形的方式,来显示计算机操作的界面,这样更方便更直观

  • CLI:命令行用户接口

就是常用的Dos命令行接口

  • Java为GUI提供的对象都存在java.Awt和java.Swing两个包中。

二、Awt和Swing

java.awt:AbstractWindow ToolKit(抽象窗口工具包),需要调用本地系统方法实现功能。属重量级控件。

java.swing:在awt的基础上,简历的一套图形界面系统,其中提供了更多的组件,而且完全由Java实现。增强了移植性,属轻量级控件。

三、继承关系图

 四、布局管理器

 五、Frame演示

1、component 是一个具有图形表示能力的对象,可在屏幕上显示,并可与用户进行交互。典型图形用户界面中的按钮、复选框和滚动条都是组件示例。

2、Frame 是带有标题和边框的顶层窗口

 六、事件监听机制

事件监听机制的组成。
|-- 事件源(组件)
|-- 事件(Event)
|-- 监听器(Listener)
|-- 处理方式(引发事件后的处理方式)

不是所有事件源都能承载事件

事件和监听器都是有对应关系的。

2、举例描述事件监听的原理

 3、事件监听机制流程图

 3、添加窗体监听

 /*
        * 在API接口文档内Frame类没有addWindowListener方法,则找Frame的父类Window,
        * 在其父类内发现有addWindowListener(WindowListener l) 方法,进一步深入WindowListener,发现WindowListener
        * 是一个接口,此接口有7个方法,而我们只想实现其中的一个方法windowClosing(实现接口内方法,可以通过抽象类,但是抽象类实现的话
        * 必须把接口内所有的方法都实现),所以找WindowListener接口的子类WindowAdapter,这个类实现了接口的所有方法,而我们只需要
        * 调用其中的windowClosing即可
        *
        * -->WindowAdapter:接收窗口事件的抽象适配器类。此类中的方法为空。此类存在的目的是方便创建侦听器对象。
        * */

        /*添加窗体监听 -->用于关闭窗口 */
        f.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });

4、添加按钮监听

/*6、添加按钮监听  -->需求:一点击按钮,窗口关闭*/
        b.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("button run....");
                System.exit(0);
            }
        });

----------------->frame到监听的完整代码<-------------------

package com.JavaGui.AwtDemo;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

/**
 * @Author wufq
 * @Date 2020/8/31 11:20
 */
public class frameDemo {
    public static void main(String[] args){
        /*1、创建窗体并做基本设置*/
        Frame f = new Frame("My Frame");//设置窗口标题
        //设置窗口像素(即:大小)(宽,高)
        f.setSize(500,400);
        //设置窗口显示的位置,(最左边,最上边)
        f.setLocation(400,150);

//        f.setBounds(500,400,400,150);  -->直接可以设置像素和位置

        f.setLayout(new FlowLayout()); //设置流式布局 -->按钮总会在窗口的左上角显示,所以需要进行布局。设置以后就会显示正常的位置

        /*2、建立组件*/
        Button b = new Button("一个按钮");
        /*3、将组件添加到窗体上*/
        f.add(b);


         /*
        * 在API接口文档内Frame类没有addWindowListener方法,则找Frame的父类Window,
        * 在其父类内发现有addWindowListener(WindowListener l) 方法,进一步深入WindowListener,发现WindowListener
        * 是一个接口,此接口有7个方法,而我们只想实现其中的一个方法windowClosing(实现接口内方法,可以通过抽象类,但是抽象类实现的话
        * 必须把接口内所有的方法都实现),所以找WindowListener接口的子类WindowAdapter,这个类实现了接口的所有方法,而我们只需要
        * 调用其中的windowClosing即可
        *
        * -->WindowAdapter:接收窗口事件的抽象适配器类。此类中的方法为空。此类存在的目的是方便创建侦听器对象。
        * */

        /*5、添加窗体监听 -->用于关闭窗口 */
        f.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });

        /*6、添加按钮监听  -->需求:一点击按钮,窗口关闭*/
        b.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("button run....");
                System.exit(0);
            }
        });

        /*4、让窗体显示*/
        f.setVisible(true);
        System.out.println("over");
    }
}

5、鼠标和键盘监听

package com.JavaGui.AwtDemo;

import java.awt.*;
import java.awt.event.*;

/**
 * @Author wufq
 * @Date 2020/9/1 11:17
 */
public class MouseAndKeyDemo {

    private Frame f;
    private TextField tf;
    private Button but;

    //构造方法初始化
    public MouseAndKeyDemo(){
        ini();
    }

    private void ini() {

        f = new Frame("演示鼠标和键盘监听"); //设置窗口
        f.setBounds(400,500,400,300); //设置设置窗口像素和显示位置
        f.setLayout(new FlowLayout());//设置流式布局

        tf = new TextField(15); //设置文本框大小
        but = new Button("确认");
        f.add(tf); //窗体添加文本
        f.add(but);

        MyEvent(); //窗体事件

        f.setVisible(true); //窗体显示


    }

    private void MyEvent() {

        //让窗体具有关闭性
        f.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });

        //在按钮上添加一个鼠标监听
        but.addMouseListener(new MouseAdapter() {
            private int count = 1;
            @Override
            public void mouseClicked(MouseEvent e) { //鼠标单击事件

                if(e.getClickCount()==2){  //e.getClickCount()==2   鼠标双击事件
                    tf.setText("Mouse..."+count++);
                }
            }
        });

        //给文本框添加键盘监听
        tf.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                //打印输出按键信息
//                System.out.println(KeyEvent.getKeyText(e.getKeyCode())+":::"+e.getKeyCode());//4:::52  D:::68

                //输入0~9的数字
                int code= e.getKeyCode();
                if(!(code>=KeyEvent.VK_0 && code<= KeyEvent.VK_9)){
                    System.out.println("必须是数字!");
                    e.consume();
                }

                //crtl+enter
                if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER){
                    System.out.println("run....");
                }
            }
        });

    }

    public static void main(String[] args){
        new MouseAndKeyDemo();
    }

}
原文地址:https://www.cnblogs.com/frankruby/p/13552845.html