我希望用户输入最多8个号码,因为它是手机号码的字段。 这是我的JTextField。
txtMobile = new JTextField();
txtMobile.setColumns(10);
txtMobile.setBounds(235, 345, 145, 25);
add(txtMobile);
虽然我们正在使用它,但如何在>> '^%$*
中检查JTextField
之类的无效字符?
1)Maximum Length
2)Accepts only numbers
3)Check for invalid characters
4)Check if it's a valid email address
请帮助:D
答案 0 :(得分:0)
您可以使用JFormattedField
,查看How to Use Formatted Text Fields,但他们不会限制用户输入他们想要的内容,而是会对值进行后验证以确定是否符合您需要的格式
您可以改用DocumentFilter
,这样您就可以实时过滤输入。
答案 1 :(得分:0)
看一下这个示例,它只接受数字作为输入,作为第二个要求的答案。
public class InputInteger
{
private JTextField tField;
private JLabel label=new JLabel();
private MyDocumentFilter documentFilter;
private void displayGUI()
{
JFrame frame = new JFrame("Input Integer Example");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JPanel contentPane = new JPanel();
contentPane.setBorder(
BorderFactory.createEmptyBorder(5, 5, 5, 5));
tField = new JTextField(10);
((AbstractDocument)tField.getDocument()).setDocumentFilter(
new MyDocumentFilter());
contentPane.add(tField);
contentPane.add(label);
frame.setContentPane(contentPane);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args)
{
Runnable runnable = new Runnable()
{
@Override
public void run()
{
new InputInteger().displayGUI();
}
};
EventQueue.invokeLater(runnable);
}
}
class MyDocumentFilter extends DocumentFilter{
private static final long serialVersionUID = 1L;
@Override
public void insertString(FilterBypass fb, int off
, String str, AttributeSet attr)
throws BadLocationException
{
// remove non-digits
fb.insertString(off, str.replaceAll("\\D++", ""), attr);
}
@Override
public void replace(FilterBypass fb, int off
, int len, String str, AttributeSet attr)
throws BadLocationException
{
// remove non-digits
fb.replace(off, len, str.replaceAll("\\D++", ""), attr);
}
}