栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

【多线程学习03】事件监听

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【多线程学习03】事件监听

一、动作事件类监听(ActionEvent)

典型事件源:JButton,JRadioButton,JList,JMenuItem

JButton运用内部类实现监听实例:

package GUIProgramming;

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

public class TestActionListener extends Jframe {

    private JButton button = new JButton("ok");
    private JLabel label = new JLabel();

    public TestActionListener(){  //构造方法
        this.setBounds(200,200,600,400);
        this.setBackground(Color.yellow);
        this.setLayout(new FlowLayout(FlowLayout.CENTER));
        this.setVisible(true);
        this.add(button);
        this.add(label);
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);  //Jframe的窗口关闭方法

        //新建JButton事件监听类对象
        ButtonActionListener buttonListener = new ButtonActionListener();
        button.addActionListener(buttonListener);
    }

    //定义JButton事件监听类进行事件处理(内部类)
    class ButtonActionListener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {  //实现动作处理方法
            label.setText("666");  //内部类访问外部类对象私有成员
        }
    }

    public static void main(String[] args) {
        new TestActionListener();
    }
}

改为匿名内部类:

package GUIProgramming;

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

public class TestActionListener extends Jframe {

    private JButton button = new JButton("ok");
    private JLabel label = new JLabel();

    public TestActionListener(){  //构造方法
        this.setBounds(200,200,600,400);
        this.setBackground(Color.yellow);
        this.setLayout(new FlowLayout(FlowLayout.CENTER));
        this.setVisible(true);
        this.add(button);
        this.add(label);
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);  //Jframe的窗口关闭方法

        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                label.setText("666");
            }
        });
    }

    public static void main(String[] args) {
        new TestActionListener();
    }
}

lambda表达式

button.addActionListener((e) -> {
            label.setText("666");
        });

二、选择事件类(ItemEvent)

典型事件源:Checkbox,JList,JComboBox

复选框Checkbox监听:

package GUIProgramming;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

public class TestCheckbox extends Jframe {

    private Checkbox box1 = new Checkbox("study",false);//定义复选框
    private Checkbox box2 = new Checkbox("sleep",false);
    private Checkbox box3 = new Checkbox("eat",false);

    class itemSelected implements ItemListener{//设置监听者(内部类)
        @Override
        public void itemStateChanged(ItemEvent e) {
            String str = "you want ";
            if(box1.getState() == true)  //选中box1
                str = str + "study ";
            if(box2.getState() == true)
                str = str + "sleep ";
            if(box3.getState() == true)
                str = str + "eat ";
            new MyDialog(str);  //新建一个弹窗,显示字符串
        }
    }

    public TestCheckbox(){  //构造方法
        itemSelected itemSelected = new itemSelected();//添加监听器
        box1.addItemListener(itemSelected);
        box2.addItemListener(itemSelected);
        box3.addItemListener(itemSelected);

        this.add(box1);//添加组件
        this.add(box2);
        this.add(box3);

        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//设置窗口
        this.setLayout(new FlowLayout(FlowLayout.CENTER));
        this.setVisible(true);
    }


    public static void main(String[] args) {
        TestCheckbox testCheckbox = new TestCheckbox();//新建窗口对象
        testCheckbox.setBounds(500,500,600,400);
        testCheckbox.setBackground(Color.CYAN);
    }
}

class MyDialog extends JDialog{//定义一个弹窗类显示字符串
    public MyDialog(String str){
        this.setVisible(true);
        this.setBounds(400,400,300,200);
        this.setTitle(str);
    }
}

三、文本事件类(TextEvent)

典型事件源:JTextField,Jtextarea

文本框TextField:

package GUIProgramming;

import javax.swing.*;
import java.awt.*;
import java.awt.event.TextEvent;
import java.awt.event.TextListener;

public class TestTextField extends Jframe {

    TextField textField = new TextField(20);

    //ActionListener 的 actionPerformed按下回车调用
    class TextFieldListener implements TextListener{
        @Override//每当输入框中内容改变时调用
        public void textValueChanged(TextEvent e) {
            TextField textField = (TextField) e.getSource(); //造型
            if(textField.getText().equals("666233"))
                System.out.println("666");
            else
                System.out.println("233");
        }
    }

    public TestTextField() {

        textField.addTextListener(new TextFieldListener());

        add(textField);
        setBounds(400,400,500,300);
        setBackground(Color.pink);
        setVisible(true);
        setLayout(new FlowLayout());
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {
        new TestTextField();
    }
}

四、窗口事件类(WindowEvent)

典型事件源:Jframe

frame窗口的关闭(匿名内部类实现):

package GUIProgramming;

import javax.swing.*;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class TestWindow extends frame {

    Button button = new Button();

    public TestWindow() {
        add(button);
        setBounds(400,400,500,300);
        setBackground(Color.pink);
        setVisible(true);
        setLayout(new FlowLayout());
        //添加窗口监听事件
        addWindowListener(new WindowAdapter() {  //匿名内部类(实现接口)
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);  //正常退出程序
            }
        });
    }

    public static void main(String[] args) {
        new TestWindow();
    }
}

五、键盘事件类(KeyEvent)

典型事件源:TextField,textarea

简单的直接判断按键实例:

package GUIProgramming;

import javax.swing.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

public class TestKeyEvent extends Jframe {

    //内部类
    //class test implements KeyListener(重写接口中的所有方法)
    class testKey extends KeyAdapter {//extends keAdapter抽象类(选择要使用的方法)
        @Override
        public void keyPressed(KeyEvent e) {  //按下按键时调用
            int key = e.getKeyCode();  //获取按下的键位编码
            if(key == KeyEvent.VK_C)//按下 C 键结束程序
                System.exit(0);
        }
    }

    public TestKeyEvent() {
        addKeyListener(new testKey());  //添加键盘监听器
        setBounds(500,500,600,400);
        setVisible(true);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {
        new TestKeyEvent();
    }

}

六、鼠标事件类(MouseEvent)

典型事件源:Panel,Canvas(画布)

package GUIProgramming;

import javax.swing.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class TestMouseEvent extends Jframe {
    class testMouseEvent extends MouseAdapter{  //适配器(内部类)
        @Override
        public void mousePressed(MouseEvent e) {//鼠标被按下时调用
            System.out.println("(" + e.getX() + "," + e.getY() + ")");
            System.out.println(e.getPoint());//输出当前点的坐标
        }
    }

    public TestMouseEvent() {  //构造方法
        addMouseListener(new testMouseEvent());
        setBounds(500,500,600,400);
        setVisible(true);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {
        new TestMouseEvent();
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/729191.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号