将整数从一个类转移到另一个类

时间:2015-04-06 09:32:38

标签: java

我有以下问题:

在我的主要课程中,我有以下几行:

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的

2 个答案:

答案 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并将其传递到您需要的位置。您基本上将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
  }
}