2011-03-05 20 views
5

我知道你可以將格式傳遞給JFormattedTextField構造函數,但是如何在運行時更改格式化程序?例如,我有一個字段應該被格式化爲整數值,但是當某個組合框的值發生改變時,現在該字段應該是浮點值。如何在運行時更改JFormattedTextField的格式?

回答

6

你可以在你的對象上調用setFormatterFactory(JFormattedTextField.AbstractFormatterFactory)

可以以這種方式使用它:

// Define the number factory. 
NumberFormat nf = NumberFormat.getIntegerInstance(); // Specify specific format here. 
NumberFormatter nff = new NumberFormatter(nf); 
DefaultFormatterFactory factory = new DefaultFormatterFactory(nff); 

// Define the decimal factory. 
DecimalFormat df = new DecimalFormat(); // And here.. 
NumberFormatter dnff = new NumberFormatter(df); 
DefaultFormatterFactory factory2 = new DefaultFormatterFactory(dnff); 

// Then you set which factory to use. 
JFormattedTextField field = new JFormattedTextField(); 
field.setFormatterFactory(factory); 
//field.setFormatterFactory(factory2);   

當你的事件發生時,因此,只要設置了工廠。

請注意DefaultFormatterFactory的構造函數可以帶幾個格式化程序;默認的一種,沒有焦點時的顯示格式,焦點時的編輯格式,以及當字段具有空值時的空格式。

+0

您是否曾嘗試在推薦此操作前直接在JFormattedTextField實例上調用setFormatter?你知道這是一種受保護的方法,對嗎? – 2011-03-05 15:44:41

+0

錯過了setFormatter()受保護的事實。 – 2011-03-05 15:46:50

+0

@netrom格式化程序和格式不是真的一樣。雖然我可以設置一個格式化工廠,但我不明白它會如何改變字段的格式。也許我錯過了一些東西。如果你有一個例子,我真的很想看到它。謝謝。 – m0s 2011-03-05 15:56:45

1

example使用InputVerifier將變體添加到默認格式。它專爲Date而設計,但您可能可以將方法調整爲Number

相關問題