Есть ли способ предотвратить автоматическое стирание JFormattedTextField недопустимого ввода?

Я использую JFormattedTextField с примененным к нему MaskFormatter для ввода номера телефона.

Однако, когда я ввожу недопустимый номер телефона, например «123», а затем нажимаю кнопку, JFormattedTextField немедленно стирает весь текст.

Есть ли способ сохранить этот недопустимый текст там?

Вот пример кода:

import java.awt.FlowLayout;
import java.text.ParseException;

import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.text.MaskFormatter;

public class Example extends JFrame 
{
    private JFormattedTextField formattedTextField;

    public Example() 
    {
        this.getContentPane().setLayout(new FlowLayout());

        try
        {
            MaskFormatter maskFormatter = new MaskFormatter("(###) ###-####");
            maskFormatter.setPlaceholderCharacter('_');
            formattedTextField = new JFormattedTextField(maskFormatter);
        }
        catch (ParseException pe)
        {
            System.out.println("Parse Exception");
        }

        JButton button = new JButton("OK");

        add(formattedTextField);
        add(button);
    }

    private static void createAndShowGUI() 
    {
        JFrame frame = new Example();

        frame.pack();

        frame.setLocationRelativeTo(null);

        frame.setVisible(true);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public static void main(String[] args) 
    {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {

            public void run() {

                createAndShowGUI(); 

            }

        });
    }
}

Если вы введете всего несколько цифр, например 123, а затем нажмете кнопку, вы увидите, как автоматически удаляется весь текст.

Вроде бы потому что я указываю

maskFormatter.setPlaceholderCharacter('_');

он заменяет все недопустимые символы символом подчеркивания, хотя я хотел бы знать, есть ли способ сохранить как недопустимый ввод 123, так и оставшиеся символы подчеркивания.


person JDJ    schedule 07.01.2014    source источник
comment
да маска ввода имеет 4 варианта,   -  person mKorbel    schedule 07.01.2014


Ответы (1)


Прямо из третьей строки документа Java:

JFormattedTextField позволяет настроить действие, которое следует предпринять при потере фокуса. Возможные конфигурации [...]

person JB Nizet    schedule 07.01.2014
comment
formattedTextField.setFocusLostBehavior(JFormattedTextField.COMMIT), похоже, работает. - person JDJ; 07.01.2014