【GUI编程学习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();
    }
}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值