【发布时间】:2010-11-13 18:43:19
【问题描述】:
我有一个使用 Swing 的小型 Java 桌面应用程序。有一个数据输入对话框,其中包含一些不同类型的输入字段(JTextField、JComboBox、JSpinner、JFormattedTextField)。当我通过切换表单或用鼠标单击它来激活 JFormattedTextFields 时,我希望它选择它当前包含的所有文本。这样,用户就可以开始输入并覆盖默认值。
我该怎么做?我确实使用了在 JFormattedTextField 上调用 selectAll() 的 FocusListener/FocusAdapter,但它没有选择任何内容,尽管调用了 FocusAdapter 的 focusGained() 方法(请参见下面的代码示例)。
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 的默认行为,至少在表单中切换时是这样。
【问题讨论】:
标签: java user-interface swing