有没有办法阻止JFormattedTextField自动擦除无效输入?

有没有办法阻止JFormattedTextField自动擦除无效输入?

问题描述:

我正在使用应用了MaskFormatter的JFormattedTextField,以便输入电话号码。有没有办法阻止JFormattedTextField自动擦除无效输入?

但是,当我输入一个无效的电话号码,如“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的输入,并还有其余的下划线。

+0

是输入掩码有4个选项, – mKorbel

直从the javadoc第三行:

的JFormattedTextField允许配置什么丢失焦点时应该采取行动。可能的配置是[...]

+0

此选项可设置,重点是边.... – mKorbel

+0

formattedTextField.setFocusLostBehavior(JFormattedTextField.COMMIT)似乎工作。 – JDJ