我想将一个带有actionListener的JButton添加到JPanel,而不像下面那样声明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);
感谢您的帮助。提前谢谢。
答案 0 :(得分:2)
JButton#addActionListener
返回void
,是链中的最后一个调用,它是编译器尝试发送到JPanel#add
的结果,显然,它不会感。
虽然我不认为方法链的优点,但API就是这样。
你可以做点像......
JPanel tempPanel = new JPanel();
tempPanel.add(new JButton(new AbstractAction() {
@Override
public void actionPerformed(java.awt.event.ActionEvent e) {
//...
}
}));
相反,这将导致与您尝试做同样的事情
答案 1 :(得分:1)
Java会向您显示错误消息,因为tempPanel.add()
的返回值为addActionListener()
,这是无效的。
有些库确实提供了链式功能(例如android中的Dialog),你可以编写这样的代码。但是,我担心,在这种情况下,你必须首先声明它,然后为JButton添加一个监听器。或者,您可以尝试编写自己的扩展JButton的Button类,并且可以在其构造函数中添加一个参数作为侦听器。