我由JSpinner
組分與SpinnerNumberModel
爲模型是這樣的:的JSpinner用的SpinnerNumberModel總是返回值0
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
難道我讀出紡紗器的值不正確?
如果您對區塊感到疑惑:我是Swing的新手,我不知道是否在創建我的JDialog
的同一線程上執行動作偵聽器,因此我將線程安全所有行爲聽衆的安全措施。 _spiNumOfAIs
是一個成員變量。
編輯:甚至從這個一小段代碼是太明顯了,我甚至沒有看到它... ...而重構我忘了,我同時使用JSpinner spinbox
和JSpinner _spiNumOfAis
,前者是微調這在GUI中是可見的。
D'oh,糟糕的代碼重構導致我訪問不是更新的spinbox的不同引用......我通過'e.getSource()訪問微調器時發現了這個問題。 '就像你的例子。我的代碼很糟糕,我應該感覺不好。不過謝謝你解釋Swing的線程規則! – Pieter 2012-04-28 09:29:40
需要SpinnerNumberModel文檔以防止非數字輸入到JSpinner – mKorbel 2012-04-28 10:08:11