我有以下问题:
在我的主班里,我有以下几行:
Integer i;
update.addActionListener(new RewardUpdater(this));
if (argument) {
i++;
}
在RewardUpdater类中,我有这个:
int i;
this.i = frame.i;
rewardButtonAddition.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
updateCenterPanel.removeAll();
c.repaint();
text.setText("Test: " + i);
c.add(beschriftung);
updateCenterPanel.add(additionReward1);
updateCenterPanel.add(additionReward2);
updateCenterPanel.add(additionReward3);
}
});
但是无论我多久为i ++完成一次if迭代;
我的我总是打印为0。
抱歉,代码有限,整个过程都很混乱,我只想把必要的东西放在这里。如果需要更多,我可以提供。
感谢您的简短答复!
真诚的
莫里兹
最佳答案
如果希望Action
(例如,单击JButton
)增加值,则可以在i++
内添加ActionListener
。
另一方面,如果您想在其他地方增加该值,我建议创建一个新类,如下所示:
public class RewardValue {
private int value;
public RewardValue(int startValue) {
this.value = startValue;
}
public void increment() {
value++;
}
public int getValue() {
return value;
}
}
然后,您可以继续创建
RewardValue
并将其传递到需要的地方。您基本上将i
与RewardValue
交换。公共方法increment
应该在您拥有i++
的地方调用。有公共方法get
,因此您可以读取新的i
的值。一个小例子如下:public class MainClass {
private final RewardValue rewardValue = new RewardValue(0);
public MainClass() {
//initiate update
//...
update.addActionListener(new RewardUpdater(rewardValue));
//of cause the next lines don't need to be in the constructor
if (argument) {
rewardUpdater.increment();
}
}
}
public class RewardUpdater implements ActionListener {
private final RewardValue rewardValue;
public RewardUpdater(RewardValue rewardValue) {
this.rewardValue = rewardValue;
}
public void actionPerformed(AcionEvent e) {
//... the other lines
text.setText("Test: "+rewardValue.get());
// ... the other lines
}
}