Я использую 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, так и оставшиеся символы подчеркивания.