我有一個使用Swing的小型Java桌面應用程序。有一個數據輸入對話框,其中包含一些不同類型的輸入字段(JTextField,JComboBox,JSpinner,JFormattedTextField)。當我激活JFormattedTextFields時,通過在表單中標籤或用鼠標單擊它,我希望它選擇當前包含的所有文本。這樣,用戶就可以開始輸入並覆蓋默認值。如何在JFormattedTextField獲取焦點時選擇所有文本?
我該怎麼做?雖然調用了FocusAdapter的focusGained()方法(請參閱下面的代碼示例),但我確實使用了調用JFormattedTextField上的selectAll()的FocusListener/FocusAdapter,但它沒有選擇任何內容。
private javax.swing.JFormattedTextField pricePerLiter;
// ...
pricePerLiter.setFormatterFactory(
new JFormattedTextField.AbstractFormatterFactory() {
private NumberFormatter formatter = null;
public JFormattedTextField.AbstractFormatter
getFormatter(JFormattedTextField jft) {
if (formatter == null) {
formatter = new NumberFormatter(new DecimalFormat("#0.000"));
formatter.setValueClass(Double.class);
}
return formatter;
}
});
// ...
pricePerLiter.addFocusListener(new java.awt.event.FocusAdapter() {
public void focusGained(java.awt.event.FocusEvent evt) {
pricePerLiter.selectAll();
}
});
任何想法?有趣的是,選擇它的所有文本顯然是JTextField和JSpinner的默認行爲,至少在通過表單標籤時。
謝謝,僅此而已。我只能猜測NumberFormatter正在做一些解除selectAll()的事情? – 2009-07-24 16:26:34
是的。它格式化值並重置文本。 – 2009-07-24 16:47:04