次のようなモデルとしてJSpinner
コンポーネントを作成しました。SpinnerNumberModel
JSpinner spinbox = new JSpinner(new SpinnerNumberModel(2, 1, 7, 1));
変更を検出するためのリスナーを追加しました。
spinbox.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent arg0) {
synchronized (this) {
System.out.println("New value: " +
((Integer)_spiNumOfAIs.getValue()).intValue());
}
}
});
しかし、私が見るのはこれだけです:
新しい値: 0
新しい値: 0
スピンボックスの値を間違って読み取っていませんか?
ブロックについて疑問がある場合synchronized
: 私は Swing を初めて使用し、作成したスレッドと同じスレッドでアクション リスナーが実行されるかどうかわからないJDialog
ため、すべてのアクション リスナーに対してスレッド セーフ対策を講じました安全に。_spiNumOfAIs
メンバー変数です。
編集:この小さなコードスニペットからでも、私はそれを見ていなかったことが明らかです...リファクタリング中に、 aJSpinner spinbox
と a の両方を使用していることを忘れていJSpinner _spiNumOfAis
ました。前者は GUI に表示されるスピナーです。