学习此内容前建议先去学习java基础知识: 匿名内部类 (学的多的可以用lambda表达式,更加简便)

好, 我们先看一下之前的代码(即一个窗口和一个按钮)

如果想看详细内容,链接为: (23条消息) java swing(GUI图形化界面)基础教程2-添加组件_尽辰的博客_java窗口添加组件

public static void main(String[] args) {

        JFrame frame=new JFrame();//这是一个窗口类

        frame.setBounds(100,100,500,500);//设置窗口位置与大小

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//用户关闭时会关闭所有窗口

        JPanel panel=new JPanel();//创建一个面板,并且将这个面板添加到窗口里面去
        frame.add(panel);
        panel.setLayout(null);//取消默认的布局管理


        JButton button=new JButton();//创建一个按钮,并且将这个按钮添加到面板上面
        button.setText("按钮");//设置按钮的文字内容
        button.setBounds(100,100,100,100);//设置按钮的位置大小
        panel.add(button);//添加按钮到面板
        

        frame.setVisible(true);//设置这窗口可见,记得尽量要把这一句放在最后面
    }

现在问题是,虽然我们会创建一个窗口,并且可以给这个窗口添加一个按钮,但是这个按钮按了没有反应,没有发生任何事件,这并不是我们想要的,因此我们需要给这个按钮添加事件监听.

添加事件监听,英文单词分别为 add ,Action, Listener

所以代码为

button.addActionListener();

当然,括号内需要内容,将鼠标移动到方法上面,查看它需要什么

javafx textfields与tableview监听 java swing 监听_事件监听

我们尝试new 一下

javafx textfields与tableview监听 java swing 监听_事件监听_02

明显第一个就是我们要的,它是一个接口,我们直接按Tab键生成(涉及匿名内部类,需要自己去学习) 

button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

            }
        });

此处 actionPerformed方法大括号内就可以填: 点击这个按钮要发生的事件,例如下面这个代码

他的意思就是: 点击一下按钮,就输出一句 666

button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println(666);
            }
    });

现在我们已经初步完成,我们来看一下目前的全部代码:

public static void main(String[] args) {

        JFrame frame=new JFrame();//这是一个窗口类

        frame.setBounds(100,100,500,500);//设置窗口位置与大小

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//用户关闭时会关闭所有窗口

        JPanel panel=new JPanel();//创建一个面板,并且将这个面板添加到窗口里面去
        frame.add(panel);
        panel.setLayout(null);//取消默认的布局管理


        JButton button=new JButton();//创建一个按钮,并且将这个按钮添加到面板上面
        button.setText("按钮");//设置按钮的文字内容
        button.setBounds(100,100,100,100);//设置按钮的位置大小
        panel.add(button);//添加按钮到面板
        
        //TODO ============== 上面是之前的代码 ===========================


        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println(666);
            }
        });

        frame.setVisible(true);//设置这窗口可见,记得尽量要把这一句放在最后面
    }

然后直接运行,我们点击一下按钮,发现控制台就输出了 666

不过吧,我们这个效果是在控制台上面,但是我们更希望效果出现在窗口上面,

就例如我把它改为下面这一段代码:

button.addActionListener(new ActionListener() {
            int buttonNumber=1;
            @Override
            public void actionPerformed(ActionEvent e) {
                button.setText("你点了"+buttonNumber+"下");
                buttonNumber++;
            }
    });

这个可以自己运行一下看一下效果(其实直接读代码也很好理解)

现在你已经有了独自设置监听的能力了

你也可以凭自己的想象来写,例如点击之后改变窗口位置大小,点击之后跳出另一个窗口....

注意事项:

这里要说明一个问题: 就是我此处的 int buttonNumber=1; 是定义在 button.addActionListener(new ActionListener() { });内部,

但是,很多时候我们的变量是定义在外面的(因为可能需要被其他地方调用,而写在里面就不好调用到),如

javafx textfields与tableview监听 java swing 监听_ide_03

结果它错误提示: buttonNumber 要为final ,这里也不细究为什么,我直接给出解决措施:

1. 多定义一个变量,然后赋值

int bn=1;
        button.addActionListener(new ActionListener() {
            int buttonNumber=bn;
            @Override
            public void actionPerformed(ActionEvent e) {
                button.setText("你点了"+buttonNumber+"下");
                buttonNumber++;
            }
    });

 2. 将它变成静态的(类属性)

javafx textfields与tableview监听 java swing 监听_java_04

文章结束,若发现错误可直接指出