因此,我創建了一個Java應用程序,該應用程序使用JSpinner和ChangeEventListener在達到特定值時運行一些代碼。當達到某些值時,會出現一個JOptionPane。但隨後JSpinner繼續旋轉。因此,如果JSpinner允許值爲1-50,並且我已將JSpinner從20增加到21,則在JOptionPane打開時它會一直保持到50。JSpinner繼續旋轉,而JOptionPane顯示在ChangeListener上
奇怪的是,這是Java 1.4.2中的一個已知錯誤,但據推測固定在5.0(Bug ID: 4840869)。我正在運行Java 6u37。事實上,錯誤問題中提供的源代碼(如下所示)對於我來說具有與錯誤原始海報完全相同的效果。對我來說,這當然不是固定的。
我能想到的唯一原因是我運行的是Mac OS 10.7.5,也許這個錯誤修復程序並未以某種方式使它進入我的版本。有什麼我可以做,以防止這種行爲發生?
源代碼展示這種(最初從錯誤報告):
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class SpinnerFrame extends JFrame implements ChangeListener {
private JSpinner spinner;
private boolean changing;
private SpinnerFrame() {
super();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().add(getSpinner());
setSize(80,60);
setLocation(200, 300);
setVisible(true);
changing = false;
}
private JSpinner getSpinner() {
if (spinner == null) {
spinner = new JSpinner();
spinner.setModel(new SpinnerNumberModel(10, 1, 50, 1));
spinner.addChangeListener(this);
}
return spinner;
}
public void stateChanged(ChangeEvent e) {
JSpinner spinner = (JSpinner) e.getSource();
int value = ((Integer) spinner.getValue()).intValue();
System.out.println("Changed to " + value);
if (changing) {
return;
}
changing = true;
if (value > 20) {
JOptionPane.showMessageDialog(this, "20 exceeded");
//While this is up, the JSpinner continues to 50
}
changing = false;
}
public static void main(String[] args) {
new SpinnerFrame();
}
}
這最終解決了我的問題。實際上,我已經有了一個用於對話框選項的Factory類來簡化代碼參數,所以我很容易實現這一點。非常感謝你! – Thunderforge
我已經發現,這隻適用於單擊向上箭頭,但如果按住向上箭頭,重複對話框仍然會發生。有任何想法嗎? – Thunderforge
檢查對話框當前是否顯示,如果不顯示。 –