如何在JavaSwing中为多个按钮添加多个ActionListener
我知道如何为它创建一个按钮和一个动作侦听器。但我希望有几个按钮和ActionListener,让它们分别执行彼此无关的操作 例如:如何在JavaSwing中为多个按钮添加多个ActionListener,java,swing,Java,Swing,我知道如何为它创建一个按钮和一个动作侦听器。但我希望有几个按钮和ActionListener,让它们分别执行彼此无关的操作 例如: protected JButton x; x = new JButton("add"); x.addActionListener(this); public void actionPerformed(ActionEvent evt) { //code.....} 现在我想有其他按钮,可能有不同的功能,如减法,乘法等。 请建议。谢谢每次只需创建ActionLis
protected JButton x;
x = new JButton("add");
x.addActionListener(this);
public void actionPerformed(ActionEvent evt) { //code.....}
现在我想有其他按钮,可能有不同的功能,如减法,乘法等。
请建议。谢谢每次只需创建
ActionListener
的新实例。
顺便说一句,由于许多原因,建议使用操作
这是一个很好的资源,它还解释了为什么应该在ActionListeners上使用Actions,这是一个名为
编辑:@fmucar是对的,您可以在一个ActionListener中完成所有操作。尽管有单独的功能操作,但您可以独立地重用它们。您可以使用
ActionEvent.getSource()
来确定源并相应地执行操作,或者您可以为每个操作定义不同的actionListener
。使用内部类:
x = new JButton("add");
x.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
//your code here
}
}
);
您可以创建不同的操作侦听器实例,而不使用您的类:
x.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e)
{ ... }
});
与任何类一样,还有其他几种方法可以创建操作侦听器,但对于简短的操作,此(匿名类)是一种方便的方法。关于:
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
}
});
那么
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);
然后
这对我来说总是有效的,但老实说,我不确定这是否是一个不错的练习@oliholz是一个很好的使用动作的例子。非常感谢。我在过去的几天里一直在寻找它,但找不到它。这段代码在
JButton(new AbstractAction(){})
处给了我一个错误,方法未定义。@FrasherGray请提供完整的错误行和您的java版本。您是否使用导入javax.swing.JButton代码>导入javax.swing.AbstractAction?不要使用ActionListener,而是使用Action:它的一般规则是始终使用可用的最高抽象
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
}
}