我有以下问题:
在我的主要课程中,我有以下几行:
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。
对于有限的代码感到抱歉,整件事情非常混乱,我试图只把必要的东西放在这里。如果需要更多,我可以提供。
感谢您的简短快速解答!
诚恳 Moritz的
答案 0 :(得分:1)
actionPerformed
方法是从帧中获取i的值的地方。否则,在构造侦听器时,该值仅从帧中获取一次,并且永远不会更改。
因此,简而言之,替换
text.setText("Test: " + i);
通过
text.setText("Test: " + frame.i);
并从i
中删除无用的RewardUpdater
字段。
答案 1 :(得分: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
}
}