我有一个JFormattedTextField
,用以下格式屏蔽电话号码:
(###) ###-####
我需要检索未格式化的原始##########
以存储在数据库中。
目前,我正在使用.getText().replaceAll("\\)", "").replaceAll("\\(", "").replaceAll("-", "").replaceAll(" ", "")
,但这似乎应该更容易。
有没有办法从JFormattedTextField
获取未屏蔽的,未格式化的原始输入?
以下是MVCE来说明:
public static void main(String args[]) {
final JFormattedTextField phone = new JFormattedTextField();
try {
phone.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.MaskFormatter("(###) ###-####")));
} catch(ParseException e) {
e.printStackTrace();
}
phone.setPreferredSize(new Dimension(125, phone.getPreferredSize().height));
final JButton button = new JButton("Get Text");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println(phone.getText().replaceAll("\\)", "").replaceAll("\\(", "").replaceAll("-", "").replaceAll(" ", ""));
}
});
JFrame frame = new JFrame();
JPanel panel = new JPanel();
panel.add(phone);
panel.add(button);
frame.add(panel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
答案 0 :(得分:2)
为什么不使用MaskFormatter
:
maskF = new MaskFormatter("(###) ###-####");
maskF.setValueContainsLiteralCharacters ( false );
askF.setOverwriteMode ( true );
maskF.setValidCharacters ( "0123456789" );
fTextField = new JFormattedTextField(maskF);
fTextField.addPropertyChangeListener("value", this);
//...
@Override
public void propertyChange(PropertyChangeEvent e) {
Object source = e.getSource();
if (source == fTextField) {
if(fTextField.getValue() != null){
System.out.println((fTextField.getValue()));
}
}
}
键入(123) 456-7890
,然后按Enter键。输出将是
1234567890
通常,由于掩码未完成,fTextField.getValue()
会返回null
完整代码
public class Main implements PropertyChangeListener {
private JFormattedTextField fTextField;
private MaskFormatter maskF ;
public static void main(String args[]) throws ParseException {
new Main().init();
}
private void init() throws ParseException {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container content = f.getContentPane();
content.setLayout(new BoxLayout(content, BoxLayout.PAGE_AXIS));
maskF = new MaskFormatter("(###) ###-####");
maskF.setValueContainsLiteralCharacters ( false );
maskF.setOverwriteMode ( true );
maskF.setValidCharacters ( "0123456789" );
fTextField = new JFormattedTextField(maskF);
fTextField.addPropertyChangeListener("value", this);
content.add(fTextField );
f.setSize(300, 100);
f.setVisible(true);
}
@Override
public void propertyChange(PropertyChangeEvent e) {
Object source = e.getSource();
if (source == fTextField) {
if(fTextField.getValue() != null){
System.out.println((fTextField.getValue()));
}
}
}
}
答案 1 :(得分:1)
您可以使用字符类来清理代码"[\\s()-]"
System.out.println(phone.getText().replaceAll("[\\s()-]", ""));
答案 2 :(得分:-2)
创建辅助变量以放置原始值,并将辅助变量中的值存储到数据库中。 JFormattedTextField只是为了显示格式的更改值。