我知道如何创建一个按钮和一个Action Listener,但我想要有多个按钮和它们的 ActionListeners 分别执行不相关的操作。
例如:
protected JButton x;
x = new JButton("add");
x.addActionListener(this);
public void actionPerformed(ActionEvent evt) { //code.....}
现在我想要其他不同功能的按钮,比如减法、乘法等,请给予建议。谢谢。
我知道如何创建一个按钮和一个Action Listener,但我想要有多个按钮和它们的 ActionListeners 分别执行不相关的操作。
例如:
protected JButton x;
x = new JButton("add");
x.addActionListener(this);
public void actionPerformed(ActionEvent evt) { //code.....}
现在我想要其他不同功能的按钮,比如减法、乘法等,请给予建议。谢谢。
那这样怎么样:
JButton addButton = new JButton( new AbstractAction("add") {
@Override
public void actionPerformed( ActionEvent e ) {
// add Action
}
});
JButton substractButton = new JButton( new AbstractAction("substract") {
@Override
public void actionPerformed( ActionEvent e ) {
// substract Action
}
});
JButton(new AbstractAction(){})
处报错,提示方法未定义。 - Frasher Grayimport javax.swing.JButton;
和 import javax.swing.AbstractAction
? - oliholz使用内部类:
x = new JButton("add");
x.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
//your code here
}
}
);
如何处理...
protected JButton x, z, a, b,c;
x = new JButton("add x");
z = new JButton("add z");
a = new JButton("add a");
b = new JButton("add b");
c = new JButton("add c");
x.addActionListener(this);
z.addActionListener(this);
a.addActionListener(this);
b.addActionListener(this);
c.addActionListener(this);
那么
public void actionPerformed(ActionEvent evt)
{
if (evt.getSource()==x)
{
//do something
}
else if (evt.getSource()==z)
{
//do something
}
else if (evt.getSource()==a)
{
//do something
}
else if (evt.getSource()==b)
{
//do something
}
else if (evt.getSource()==c)
{
//do something
}
}
这对我总是有效,但老实说我不确定它是否是一种不好的做法。
您可以使用 ActionEvent.getSource()
来确定来源并相应地采取行动,或者您可以为每个来源定义不同的 ActionListeners
。
每次只需要创建ActionListener
的新实例即可。顺便说一下,出于许多原因,建议使用Action
。
这里有一个很好的资源,它还解释了为什么你应该使用Actions而不是ActionListeners,一个名为How to Use Actions的Java教程。
编辑:@fmucar是正确的,你可以在单个ActionListener中完成所有操作。但是,拥有单独的功能Actions允许您独立地重用它们。
x.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e)
{ ... }
});
有几种其他方法可以创建动作监听器,就像任何类一样,但对于短动作而言,这(匿名类)是一种方便的方式。