マウスのクリックで強調表示する 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;
どんな助けでも大歓迎です!