Day10-GUI图形界面


title: Day10-GUI图形界面
date: 2020-07-02 18:06:44
author: 子陌


GUI(图形用户界面)

  • GUI
    • Graphical User Interface(图形用户接口)
    • 用图形的方式,来显示计算机操作的界面,这样更方便更直观
  • CLI
    • Command Line User Interface(命令行用户接口)
    • 就是常见的Dos命令行操作
    • 需要记忆一些常用的命令,操作不直观
  • 举例:
    • 例如:创建文件夹,或者删除文件夹等
  • Java为GUI提供的对象都存在java.awt和javax.swing两个包中

Awt和Swing

  • java.awt:Abstract Window ToolKit(抽象窗口工具包),需要调用本地系统方法实现功能。属重量级控件
  • java.swing:在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由Java实现。增强了移植性,属轻量级控件

GUI继承关系图

布局管理器

  • 容器中组件的排放方式,就是布局
  • 常见的布局管理器:
    • FlowLayout(流式布局管理器)
      • 从左到右的顺序排列
      • Panel默认的布局管理器
    • BorderLayout(边界布局管理)
      • 东,南,西,北,中
      • Frame默认的布局管理器
    • GridLayout(网格布局管理器)
      • 规则的矩阵
    • CardLayout(卡片布局管理器)
      • 选项卡
    • GridBagLayout(网格包布局管理器)
      • 非规则矩阵

布局样式

建立一个简单的窗体

  • Container常用子类:Window Panel(面板,不能单独存在)
  • Window常用子类:Frame Dialog
  • 简单的窗体创建过程:
package GUITest;
import java.awt.*;

public class FreamDemo {
    
    
    public static void main(String[] args) {
    
    
        Frame frame = new Frame("MyQQ");
        // 设置窗体大小
//        frame.setSize(500, 400);
        // 设置初始位置
//        frame.setLocation(550, 200);
        // 设置初始位置和窗体大小
        frame.setBounds(550, 200, 500, 400);
        // 设置流式布局
        frame.setLayout(new FlowLayout());
        // 创建按钮
        Button button = new Button("click");
        // 添加到窗体
        frame.add(button);
        // 显示窗体
        frame.setVisible(true);
        System.out.println("over");
    }
}

事件监听机制组成

  • 事件源(组件)
  • 事件(Event)
  • 监听器(Listener)
  • 事件处理(引发事件后处理方式)

事件监听机制流程图

// 事件监听
public static void main(String[] args){
    
    
    frame.setBounds(550, 200, 500, 400);
    frame.setLayout(new FlowLayout());
    Button button = new Button("click");
    frame.add(button);
    rame.setVisible(true);
    
    // 按钮监听器
    button.addActionListener(new ActionListener() {
    
    
        @Override
        public void actionPerformed(ActionEvent actionEvent) {
    
    
            System.exit(0);
        }
    });

    // 设置监听器
    frame.addWindowListener(new WindowAdapter() {
    
    
        @Override
        public void windowClosing(WindowEvent e) {
    
    
            super.windowClosing(e);
            System.exit(0);
        }
    });
}

鼠标键盘监听

package GUITest;

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

public class MouseAndKeyDemo {
    
    
    private Frame frame;
    private TextField textField;
    private Button button;

    public MouseAndKeyDemo() {
    
    
        init();
    }
    private void init(){
    
    
        frame = new Frame("鼠标键盘监听");
        frame.setBounds(400, 200, 500, 400);
        frame.setLayout(new FlowLayout());
        textField = new TextField(15);
        button = new Button("click");
        frame.add(textField);
        frame.add(button);
        myEvent();
        frame.setVisible(true);
    }

    private void myEvent() {
    
    
        // 窗体监听
        frame.addWindowListener(new WindowAdapter() {
    
    
            @Override
            public void windowClosing(WindowEvent e) {
    
    
                System.exit(0);
            }
        });
        // 给按钮添加一个事件 鼠标事件先执行后执行按钮事件
        button.addActionListener(new ActionListener() {
    
    
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
    
    
                System.out.println("btn run..");
            }
        });

        // 在按钮上添加一个鼠标监听
        button.addMouseListener(new MouseAdapter() {
    
    
            private int count = 1;

            // 进入事件
            @Override
            public void mouseEntered(MouseEvent e) {
    
    
                textField.setText("触发:" + count++);
            }
            // 点击事件
            @Override
            public void mouseClicked(MouseEvent e) {
    
    
                System.out.println("mouse run...");
                if (e.getClickCount() == MouseEvent.BUTTON2){
    
    
                    textField.setText("double click");
                }
            }
        });
        // 键盘监听
        textField.addKeyListener(new KeyAdapter() {
    
    
            @Override
            public void keyPressed(KeyEvent e) {
    
    
                int code = e.getKeyCode();
                if (!(code>=KeyEvent.VK_0 && code <= KeyEvent.VK_9)){
    
    
                    System.out.println("必须是数字");
                    e.consume();
                }
                if (e.isControlDown() && code == KeyEvent.VK_ENTER){
    
    
                    // Ctrl + Enter
                    System.out.println("c + en");
                }
            }
        });
    }
    public static void main(String[] args) {
    
    
        MouseAndKeyDemo mouseAndKeyDemo = new MouseAndKeyDemo();
    }
}

猜你喜欢

转载自blog.csdn.net/qq_38205875/article/details/107815008