GUI 事件监听和文本框事件监听

4.事件监听

事件监听:什么事情发生了,需要做什么?

什么事情是事件,做什么?是我们编辑的功能

事件:是鼠标事件,键盘事件等。

例如鼠标按下,要下载音乐

键盘按下哪一个按键,需要执行什么操作

public static void main(String[] args) {
        Frame frame = new Frame("事件监听窗口");
        Button btn = new Button("按钮");
                //实例化实现类MyActionListener
    
        MyActionListener myActionListener = new MyActionListener();
            
        btn.addActionListener(myActionListener)
        
    }
}
​
//实现类MyActionListener 实现接口 ActionListener
//重写了接口中的方法actionPerformed
​
class MyActionListener implements ActionListener{
    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.print("按钮被点击");
    }
    
    
}

事件监听例子

public class TestActionListener_02 {
    public static void main(String[] args) {
        Frame frame = new Frame("事件监听窗口");
        Button btn = new Button("按钮");
        
        frame.add(btn,BorderLayout.CENTER);
        frame.pack();
        frame.setVisible(true);
        frame.setSize(500, 300);
        
        //实例化实现类MyActionListener
        MyActionListener myActionListener = new MyActionListener();
            
        btn.addActionListener(myActionListener);
        //关闭程序
        WindowClosing(frame);
        
        
    }
    //抽象关闭方法
    //private是本类可以使用,是static是静态可以调静态方法
    private static void WindowClosing(Frame frame) {
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
​
}
//实现类MyActionListener 实现接口 ActionListener
//重写了接口中的方法actionPerformed
class MyActionListener implements ActionListener{
    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("按钮被点击");
    }
    
    
}

两个按钮共用一个事件

优点,不需要一个按钮一个按钮的写实现类。可以多个按钮,通过判断按钮的信息来判断哪一个按钮被点击。编写不同的实现方法

    public static void main(String[] args) {
        //两个按钮共用一个事件
        //可以避免多个按钮的时候,不用一个一个的写实现类
        //需要学习?方法来判断是事件发生的时候,是哪一个按钮被点击.
        //setActionCommand()
        
        
        Frame frame = new Frame("两个按钮共用一个事件");
        frame.setVisible(true);
        frame.setSize(500, 500);
        
        
        Button btn1 = new Button("start");
        Button btn2 = new Button("stop");
        
        //可以显式定义触发是返回的信息,如果不显式定义,则使用默认label。
        btn2.setActionCommand("这是暂停按钮--显式定义");
        frame.add(btn1,BorderLayout.NORTH );
        frame.add(btn2,BorderLayout.SOUTH);
        
        MyMonitor myMonitor = new MyMonitor();
        
        btn1.addActionListener( myMonitor );
        btn2.addActionListener( myMonitor );
        
        //关闭窗口
        closeWindow(frame);
        
    }
    //抽象关闭窗口方法
    public static void closeWindow(Frame frame) {
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
​
}
class MyMonitor implements ActionListener{
​
    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("按钮被点击:=》 "+e.getActionCommand());
    }
    
}

如果按钮都没有label也没有定义,那么会返回什么? 什么都没有

那么怎么来判断是哪一个按钮???

e.getActionCommand();//获取返回信息
btn2.setActionCommand("the_end_button");//设置信息

public static void main(String[] args) {
        
        Frame frame = new Frame("两个按钮共用一个事件");
        frame.setVisible(true);
        frame.setSize(500, 500);
        
        //按钮及label
        Button btn1 = new Button("start");
        Button btn2 = new Button("stop");
        Button btn3 = new Button("pause");
                
        //可以显式定义触发是返回的信息,如果不显式定义,则使用默认label。
        btn2.setActionCommand("the_end_button");
    
    
        //布局按钮
        frame.add(btn1,BorderLayout.NORTH );
        frame.add(btn2,BorderLayout.SOUTH);
        frame.add(btn3,BorderLayout.CENTER);
        MyMonitor2 myMonitor = new MyMonitor2();
    
        //按钮添加事件监听
        btn1.addActionListener( myMonitor );
        btn2.addActionListener( myMonitor );
        btn3.addActionListener( myMonitor );
        
        //关闭窗口
        closeWindow(frame);
        
    }
    //抽象关闭窗口方法
    public static void closeWindow(Frame frame) {
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
​
}
//实现监听   的实现类
class MyMonitor2 implements ActionListener{
​
    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getActionCommand().equals("start")) {
            
            System.out.println("这是开始按钮被点击了");
        
        }else if (e.getActionCommand().equals("the_end_button")) {
            
            System.out.println("这是显式btn按钮被点击了");
    
        }else {
        
            System.out.println("这是  暂停  按钮被点击了");
    }
    
​
    }
}
​

5.输入框事件监听

textField 文本框 单行输入

textArea 文本域 多行输入

一般是分开类写。main方法一般只写启动

第二个是自己的类

new textfile

放入 frame

调整frame的可见 大小等

实例化 实现类的接口(事件)

给文本框添加事件

三个是实现类

public class TextField_ActionListener {
    //文本框的事件监听器
    public static void main(String[] args) {
        //启动
        new MyTextFiled();
    }
​
}
//
class MyTextFiled extends Frame{
​
    public MyTextFiled() {
    super();
    TextField textField = new TextField();//生成文本框
    add(textField);                       //添加进frame
    setVisible(true);                     //设置frame可见性
    setSize(500, 500);
    TfActionListener tf = new TfActionListener();//实例化接口的实现类
    textField.addActionListener(tf);  
    //添加文本框监听事件
    
    closeWindow(this);
    
    }
    public static void closeWindow(Frame frame) {
        
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
    
}
//文本框事件监听实现
class TfActionListener implements ActionListener{
    @Override
    public void actionPerformed(ActionEvent e) {
        //e.getSource();//获得资源方法,但会的是一个对象
        TextField field=(TextField)e.getSource();//强转形 多态
//      System.out.println(field);
        System.out.println(field.getText());//转形后getText()获得文本框输入的方法
        
    }
}

疑惑这个关闭的方法,应该怎么写,怎么调用才对,为什么写this也可以,而不是写super(),super只能写第一行???

猜你喜欢

转载自blog.csdn.net/weixin_70271498/article/details/127094843