gpt4 book ai didi

java - 添加一个 ActionListener 可以很短吗?我可以向 actionPerformed 添加参数吗?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:57:50 26 4
gpt4 key购买 nike

我有一个大表格,每个单元格中都有一个按钮。这些按钮非常相似,功能几乎相同。如果我以这种方式为每个按钮添加一个 Action 监听器:

tmp.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent evt) {
proposition = proposition + action;
SwingUtilities.invokeLater(new Runnable() {
public void run() {
updatePropositionPanel();
}
});
}
});

实际上,每个 Action 监听器与所有其他监听器的区别在于 action 的值。 propositionupdatePropositionPanel 是类的字段和方法。

  1. 首先,我认为如果不使用内部类,我可以缩短它。所以,我决定编写一个新的 ActionListener 类。但后来我意识到,在这种情况下,“命题”对于此类的实例是不可见的。

  2. 然后我决定将 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com