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

时间:2018-03-05 10:39:26

标签: java swing jbutton actionlistener

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

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()中而进行代码简化。

有没有办法做到这一点?

由于

1 个答案:

答案 0 :(得分: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);
        }
    });