【发布时间】:2011-08-14 22:02:57
【问题描述】:
我一直在尝试让 JFormattedTextField 在鼠标单击时突出显示。在浏览字段时,我已经能够让它正常工作,但是我想在点击时突出显示所有内容。
如果我在文本字段上单击并按住大约 1.5-2 秒,我只能在鼠标单击时突出显示;我不知道为什么。
我已经搜索并尝试了一些修复方法,包括扩展类;
class HFTextField extends JFormattedTextField
{
HFTextField(MaskFormatter formatter)
{
super(formatter);
}
@Override
protected void processFocusEvent(FocusEvent e)
{
super.processFocusEvent(e);
if (e.getID() == FocusEvent.FOCUS_GAINED)
{
this.selectAll();
}
}
}
我还定义了一个(相当冗长!)使用 SwingUtilities.invokelater 的 FocusListener;
public static FocusListener CreateHighlightTextFieldFocusListener(final JTextField text_field)
{
FocusListener fl =
new FocusAdapter()
{
public void focusGained(FocusEvent evt)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
text_field.selectAll();
}
});
}
};
return fl;
}
这是创建格式化文本字段的函数;
public static JTextField CreateFormattedTextField(int x, int y, int width, int height,
Method action_method, Method changed_method, Method remove_method,
Method update_method, String mask_formatter, String banned_chars)
{
MaskFormatter formatter = null;
try {
formatter = new MaskFormatter(mask_formatter);
} catch (ParseException e) {
assert(false);
}
if(banned_chars != null)
formatter.setInvalidCharacters(banned_chars);
JTextField text_field = new HFTextField(formatter);
text_field.setBounds(x, y, width, height);
if(action_method != null)
{
text_field.addActionListener(CreateTextFieldActionListener(action_method, text_field));
}
text_field.getDocument().addDocumentListener(
CreateTextFieldDocumentListener(changed_method, remove_method,
update_method, text_field));
text_field.addFocusListener(CreateHighlightTextFieldFocusListener(text_field));
return text_field;
任何帮助将不胜感激!
【问题讨论】:
-
添加一个 focusListener 并在 focusGained 中调用 selectAll 是可行的解决方案 - 通常 :-) 如果它不在您的上下文中,则需要一个演示问题的小型可运行示例来跟踪区别。
-
顺便说一句:无需硬编码对 textField 的引用 - 事件有一个方法 getComponent 来获取其发送者
标签: java swing highlight jformattedtextfield