Java 从JFormattedTextField获取原始、未格式化、未屏蔽的文本
我有一个Java 从JFormattedTextField获取原始、未格式化、未屏蔽的文本,java,swing,jformattedtextfield,Java,Swing,Jformattedtextfield,我有一个JFormattedTextField,它以以下格式屏蔽电话号码: (###) ###-#### 我需要检索未格式化的原始,并将其存储在数据库中 目前,我使用的是.getText().replaceAll(“\\”,”).replaceAll(“\\(“,”).replaceAll(“-”,”).replaceAll(“,”),但这似乎应该更容易些 有没有办法从JFormattedTextField获取未屏蔽、未格式化的原始输入 下面是一些示例: public static void
JFormattedTextField
,它以以下格式屏蔽电话号码:
(###) ###-####
我需要检索未格式化的原始,并将其存储在数据库中
目前,我使用的是.getText().replaceAll(“\\”,”).replaceAll(“\\(“,”).replaceAll(“-”,”).replaceAll(“,”)
,但这似乎应该更容易些
有没有办法从JFormattedTextField
获取未屏蔽、未格式化的原始输入
下面是一些示例:
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);
}
为什么不使用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()));
}
}
}
}
您可以使用字符类清理代码“[\\s()-]”
创建辅助变量以放入原始值,并将辅助变量中的值存储到数据库中。JFormattedTextField只是为了显示格式的更改值。请原谅我的无知,但这将如何帮助OP揭开文本的面纱?@MadProgrammer抱歉,我只写了方向。总之更新了我的问题
System.out.println(phone.getText().replaceAll("[\\s()-]", ""));