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实现。增强了移植性,属轻量级控件
布局管理器
- 容器中组件的排放方式,就是布局
- 常见的布局管理器:
- FlowLayout(流式布局管理器)
- 从左到右的顺序排列
- Panel默认的布局管理器
- BorderLayout(边界布局管理)
- 东,南,西,北,中
- Frame默认的布局管理器
- GridLayout(网格布局管理器)
- 规则的矩阵
- CardLayout(卡片布局管理器)
- 选项卡
- GridBagLayout(网格包布局管理器)
- 非规则矩阵
- FlowLayout(流式布局管理器)
建立一个简单的窗体
- 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();
}
}