我有一个使用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