【Java-GUI】03 事件监听

——1、监听机制案例

简答理解:操作驱动程序执行

完整的操作体系:事件源、事件、监听器、注册监听

案例:

点击OK按钮,让上方的输入框写入一段字符

package cn.dzz;

import javafx.scene.layout.Border;
import javafx.scene.layout.Pane;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Main {
    public static void main(String[] args) {
        Frame frame = new Frame("GUI-Lesson");

        // 组件添加
        Box verticalBox = Box.createVerticalBox();
        TextField textField = new TextField(20);
        Button ok = new Button("ok");
        verticalBox.add(textField);
        verticalBox.add(ok);
        frame.add(verticalBox, BorderLayout.CENTER);

        // 事件处理
        ok.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                textField.setText("Hello Java-GUI !!!");
            }
        });

        frame.pack();
        frame.setVisible(true);
    }
}

——2、常见API

AWT将事件定义了两个类别:

简单事件和复杂事件

简单事件

ComponentEvent 组件事件(窗体大小,位置,显示状态发生变化触发)

ContainerEvent 容器事件(向容器添加,删除组件触发)

WindowEvent(打开,关闭,最小化最大化触发)

FocusEvent(获取焦点,失去焦点触发)

KeyEvent(按下,松开,单击触发)

MouseEvent(单击,按下,松开,移动触发)

PainteEvent(组件绘制事件,自定义)

复杂事件

ActionEvent 
动作事件,当按钮、菜单项被单击
在TextField中按下Enter键触发

AjustmentEvent
调节时间,在滑动条上移动滑块以调节数值时触发

ItemEvent
选项时间,当用户选中某项,取消选中时触发

TextEvent
文本事件,当文本框,文本域里的文字发生改变时触发

对应的监听器对象

ActionListener 动作监听

ItemListener 项监听

MouseMotionListener 鼠标移动监听

MouseListener 鼠标监听

KeyListener 按键监听

FocusListener 焦点监听

AdjustmentListener 调整监听

ComponentListener 组件监听

WindowListener 窗体监听

ContainerListener 容器

TextListener 文本监听

案例:

package cn.dzz;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Main {
    public static void main(String[] args) {
        // 创建窗体
        Frame frame = new Frame();

        // 这个添加要放在组件添加之前(组件加入才会被监听到)
        frame.addContainerListener(new ContainerListener() {
            // 该方法监听窗体容器的组件添加
            @Override
            public void componentAdded(ContainerEvent e) {
                Component child = e.getChild();
                System.out.println("窗体容器添加了 :" + child);
            }
            // 该方法监听窗体容器的组件移除
            @Override
            public void componentRemoved(ContainerEvent e) {
                Component child = e.getChild();
                System.out.println("窗体容器移除了 :" + child);
            }
        });

        // 画好的组件
        Box horizontalBox = Box.createHorizontalBox();

        Choice choice = new Choice();
        choice.add("A");
        choice.add("B");
        choice.add("C");

        TextField textField = new TextField(30);

        horizontalBox.add(choice);
        horizontalBox.add(textField);

        frame.add(horizontalBox, BorderLayout.CENTER);

        // 增加组件的事件监听
        textField.addTextListener(new TextListener() {
            @Override
            public void textValueChanged(TextEvent e) {
                // 事件触发,获取组件的文本内容
                String text = textField.getText();
                System.out.println("输入框的内容:" + text);
            }
        });
        choice.addItemListener(new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent e) {
                Object item = e.getItem();
                System.out.println("下拉选择的内容:" + item );
            }
        });
        
        // 可见 与 自适应
        frame.setVisible(true);
        frame.pack();
    }
}

控制台打印的内容:

输入框的内容:我去恶趣
输入框的内容:我去恶趣味
输入框的内容:我去恶趣味
输入框的内容:我去恶趣味
输入框的内容:我去恶趣味
输入框的内容:我去恶趣
输入框的内容:我去恶
下拉选择的内容:B
下拉选择的内容:C
下拉选择的内容:A

组件添加到窗体容器时触发监听器:

窗体容器添加了 :javax.swing.Box[,0,0,0x0,invalid,layout=javax.swing.BoxLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=0,maximumSize=,minimumSize=,preferredSize=]

按X关闭窗口的案例

package cn.dzz;
import java.awt.*;
import java.awt.event.*;

public class Main {
    public static void main(String[] args) {
        // 创建窗体
        Frame frame = new Frame();
        frame.setBounds(200,200,500,300);

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

        frame.setVisible(true);
    }
}

 

原文地址:https://www.cnblogs.com/mindzone/p/14372652.html