选项卡式JTextField选择解决方法不适用于JFormattedTextField

时间:2015-07-17 09:05:06

标签: java swing jformattedtextfield focuslistener

我已将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)));

我注意到,在重新获得焦点时,插入符被设置为零位置。谁能解释为什么格式化程序会这样做,并建议一种解决这个问题的方法?

1 个答案:

答案 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());
            }
        });