我已将FocusAdapter
添加到我的JFormattedTextField
,以便在焦点丢失时选择其内容,以便在选项卡返回但未点击时选择文本
final FocusAdapter listener = new FocusAdapter()
{
@Override
public void focusLost(FocusEvent e)
{
super.focusLost(e);
AccessibleEditableText text = e.getComponent().getAccessibleContext().getAccessibleEditableText();
text.selectText(0, text.toString().length());
}
};
yearPublishedTextField.addFocusListener(listener);
但是,这对于此特定文本字段不起作用,因为我添加了以下格式化程序:
NumberFormat nf = NumberFormat.getIntegerInstance();
nf.setGroupingUsed(false);
yearPublishedTextField.setFormatterFactory(new DefaultFormatterFactory(new NumberFormatter(nf)));
我注意到,在重新获得焦点时,插入符被设置为零位置。谁能解释为什么格式化程序会这样做,并建议一种解决这个问题的方法?
答案 0 :(得分:0)
格式化程序正在更新字段的事实使我的解决方法无用,所以我通过使用正则表达式替换格式化yearPublishedTextField
来解决这个问题,因为我只需要基本格式化。
yearPublishedTextField.addFocusListener(new FocusAdapter()
{
@Override
public void focusLost(FocusEvent e)
{
super.focusLost(e);
yearPublishedTextField.setText(yearPublishedTextField.getText().replaceAll("[^0-9]", ""));
yearPublishedTextField.setSelectionStart(0);
yearPublishedTextField.setSelectionEnd(yearPublishedTextField.getText().length());
}
});