- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个大表格,每个单元格中都有一个按钮。这些按钮非常相似,功能几乎相同。如果我以这种方式为每个按钮添加一个 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/
我遇到了一个奇怪的问题。我正在尝试使用 logcollector 从我的安卓手机收集一些日志或 aLogcat .我的 Nexus S 和 moto Defy 一切正常,但当我尝试从 Galaxy S
我有一部分正在工作,但我被告知如果条件 block 很短,我应该使用三元。 module PayerContractsHelper def showPayerContractRate(val)
我是一名优秀的程序员,十分优秀!