【发布时间】:2016-03-11 07:07:28
【问题描述】:
我想在 JPanel 中添加一个带有 actionListener 的 JButton,而不像下面这样声明 JButton。
JPanel tempPanel = new JPanel();
tempPanel.add(new JButton().addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// DO SOMETHING
}
}));
错误消息给我Cannot resolve method 'add(void)'。
我不知道为什么这是不正确的。只是语法错误吗?还是我不能像这样用 ActionListener 添加 JButton?
我确定,如果我这样做,它会起作用。
JButton tempButton = new JButton();
tempButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// DO SOMETHING
}
});
tempPanel.add(tempButton);
感谢您的帮助。提前致谢。
【问题讨论】:
-
因为
addActionListener是您在JButton上调用的方法,并且该方法不会返回JButton,因为它是void。最后void不是add方法的有效参数。您通常不能在Java中链接这样的方法,因为它们很可能不会返回this。 -
感谢您回答我的问题。那么,这是否意味着没有不同的方法可以让我的第一个代码工作?除了我作为第二个代码编写的方式?
-
new JButton(new AbstractAction() { ... }) 你需要在 AbstractAction 中实现 actionPerformed 方法,但你会得到基本相同的结果
-
@MadProgrammer 谢谢!您总是能很好地回答问题,包括我的其他几个问题和许多其他问题...我总是看到您回答或评论 Java 问题...再次感谢! :)
</offtopic>
标签: java swing jpanel jbutton actionlistener