zoukankan      html  css  js  c++  java
  • 【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);
        }
    }

     

  • 相关阅读:
    ASCII对应码表-键值(完整版)
    node.js中使用路由方法
    关于vscode自动跳转回车的解决方法(关闭vscode自动保存功能;可能和其他插件有冲突)
    js中 !==和 !=的区别是什么
    spring 请求参数和路径变量
    PowerShell因为在此系统中禁止执行脚本解决方法
    SQL server 2008数据库的备份与还原(亲测,效果良好)注意采用单用户模式呀
    webpack-dev-server提示css模块解析失败,但已经装了css-loader
    webpack集成vue单文件模式的很多坑(研究了1个星期)
    npm全局模块卸载及默认安装目录修改方法
  • 原文地址:https://www.cnblogs.com/mindzone/p/14372652.html
Copyright © 2011-2022 走看看