我有一个大表格,每个单元格中都有一个按钮。这些按钮非常相似,功能几乎相同。如果我以这种方式为每个按钮添加一个 Action 监听器:
tmp.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent evt) {
proposition = proposition + action;
SwingUtilities.invokeLater(new Runnable() {
public void run() {
updatePropositionPanel();
}
});
}
});
实际上,每个 Action 监听器与所有其他监听器的区别在于 action
的值。 proposition
和updatePropositionPanel
是类的字段和方法。
首先,我认为如果不使用内部类,我可以缩短它。所以,我决定编写一个新的 ActionListener 类。但后来我意识到,在这种情况下,“命题”对于此类的实例是不可见的。
然后我决定将 actionPerformed 方法添加到当前类并执行此操作:
addActionListener(this)
。但是我意识到我不知道如何为 actionPerformed 方法提供参数。
那么,它是如何工作的。我可以用简短而优雅的方式添加 Action 监听器吗?
已添加:
我喜欢使用可以接受一些参数的构造函数和 actioPerformed 方法编写内部类的想法,该方法可以使用构造函数中给定的参数。我开始这样做,然后意识到它会与其他内部匿名类(在上面给定的代码中使用)产生冲突。所以,我想我会创建另一个类(不是内部类)。
最佳答案
您可以创建自己的类并将数据传递给构造函数。例如
public class MyActionListener
{
private int proposition;
private MyOtherClass moc;
public MyActionListener(int proposition, MyOtherClass moc) {
this.proposition = proposition;
this.moc = moc;
}
public void actionPerformed(ActionEvent evt) {
proposition += moc.action;
SwingUtilities.invokeLater(new Runnable() {
public void run() {
moc.updatePropositionPanel();
}
});
}
}
然后您可以正常添加它,将您喜欢的任何参数传递给构造函数:
tmp.addActionListener( new MyActionListener(proposition, this) );
关于java - 添加一个 ActionListener 可以很短吗?我可以向 actionPerformed 添加参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2515552/