我知道如何为它创建一个按钮和一个动作侦听器。但是我希望它们有几个按钮和actionListeners,它们可以执行彼此无关的单独操作。
示例:
protected JButton x;
x = new JButton("add");
x.addActionListener(this);
public void actionPerformed(ActionEvent evt) { //code.....}
现在我想要其他按钮可能有不同的功能,如减法,乘法等。 请建议。感谢
答案 0 :(得分:11)
怎么样:
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
}
});
答案 1 :(得分:7)
使用内部类:
x = new JButton("add");
x.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
//your code here
}
}
);
答案 2 :(得分:5)
您可以使用ActionEvent.getSource()
来确定来源并采取相应措施,也可以为每个来源定义不同的ActionListeners
。
答案 3 :(得分:2)
怎么样......
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
}
}
这对我来说总是有用,但说实话,我不确定这是不是不好的做法
答案 4 :(得分:1)
您每次只需要创建ActionListener
的新实例。
BTW由于很多原因,建议使用Action
代替。
这是一个很好的资源,它也解释了为什么你应该使用Action over ActionListeners,一个标题为How to Use Actions的Java教程
编辑:@fmucar是对的,你可以在一个ActionListener中完成所有操作。虽然具有单独的功能操作允许您独立重用它们。
答案 5 :(得分:1)
您可以创建不同的动作侦听器实例,而不是使用您的类:
x.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e)
{ ... }
});
创建动作侦听器还有其他几种方法,就像任何类一样,但对于简短的动作,这个(匿名类)是一种方便的方法。