2012-10-10 51 views
1

我有一個jSpinnerSpinnerNumberModel這樣的:避免的JSpinner採取字母

spinnerModelFix = new SpinnerNumberModel(0, 0, 65535, 1); 
JSpinner fixedValueSpinner = new JSpinner(spinnerModelFix); 

我只是想表明整數的微調,因此,如果用戶插入的信件沒有顯示他們。

我想我應該extends SpinnerNumberModeloverridefireStateChanged()方法...

但我不知道我需要在方法來做。

任何人都可以給我一些提示嗎?

回答

3
  • 肯定是可能的,解決方法很簡單,

  • 有兩種方法如何做到這一點,必須得到JTextFieldJSpinnerJFormattedTextField

  • 然後添加

    a)DocumentListener

    B)DocumentFilter

我覺得DocumentFilter is easiest for code workaround, better, maybe safer

+0

DocumentFilter的+1,很好的例子! :) – tenorsax

+0

@這個想法的最大作者是JTextComponents國王 – mKorbel

+0

這可以工作,但是當顯示的值高於1000時,增加或減少該值的箭頭不再有效......您知道可能是什麼問題嗎? – amp

2

你可以嘗試setAllowsInvalid(false)微調格式。例如:

SpinnerNumberModel spinnerModelFix = new SpinnerNumberModel(0, 0, 65535, 1); 
JSpinner fixedValueSpinner = new JSpinner(spinnerModelFix); 
JFormattedTextField textField = ((JSpinner.NumberEditor) fixedValueSpinner 
     .getEditor()).getTextField(); 
((NumberFormatter) textField.getFormatter()).setAllowsInvalid(false); 
+0

+1不錯的使用而不是安全:-) – mKorbel

+0

,這似乎是工作或多或少,但不要讓我刪除了所有的數字,如果我想。它需要至少有一個數字...... – amp

+0

@amp @mKorbel建議的'DocumentFilter'可能更適合您的情況。 – tenorsax