我有以下问题:

在我的主班里,我有以下几行:

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并将其传递到需要的地方。您基本上将iRewardValue交换。公共方法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
  }
}

09-05 17:06