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);
        }
    }

     

  • 相关阅读:
    Servlet学习之http
    初识JDBC-篇四
    初识JDBC-篇三
    正则表达式简单应用3
    正则表达式简单应用2
    正则表达式简单应用1
    反射的简单应用三
    反射的简单应用2
    反射简单的应用
    TCP协议应用--上传文件
  • 原文地址:https://www.cnblogs.com/mindzone/p/14372652.html
Copyright © 2011-2022 走看看