如何在将JComponent的实例化添加到JContainer时添加ActionListener?

问题描述 投票:0回答:1

我想通过这样做添加组件:

frame.add(new JButton("Click here"));

但是,如何添加ActionListener呢?我假设它可能与AbstractButton实例化有关?

我不想实例化JButton变量,所以我不确定这是否是正确的方法:

    frame.add(new JButton("Click here"), new AbstractButton() {
        public void addActionListener(ActionListener l) {
            // do stuff
        }
    });

如果这有效,我需要将它添加到actionPerformed()中,如下所示:

JButton button = new JButton("Click here");
button.addActionListener(this);

注意,我不是要为ActionListener做匿名内部类,而只是为了将组件添加到actionPerformed()中而进行代码简化。

有没有办法做到这一点?

谢谢

java swing jbutton actionlistener
1个回答
3
投票

三个选项:

选项1:在我看来最干净

    JFrame frame = new JFrame();

    JButton button = new JButton("Click Here");
    frame.add(button);
    button.addActionListener(this);

选项2匿名类

    JFrame frame = new JFrame();

    JButton button = new JButton("Click Here");
    frame.add(button);

    button.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            System.out.println("Clicked");
        }
});

选项3

这不推荐,丑陋且有意想不到的副作用(想象再次调用add)。但是你想要一种方法直接在添加中进行。

    JFrame frame = new JFrame();

    JButton button = new JButton("Click Here");
    frame.add(new JButton("Click Here"){
        @Override
        public void addActionListener(ActionListener l) {
            super.addActionListener(YourClass.this);
        }
    });
© www.soinside.com 2019 - 2024. All rights reserved.