JTextField的最大长度,只接受数字?

时间:2014-02-05 06:37:10

标签: email numbers character max jtextfield

我希望用户输入最多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

2 个答案:

答案 0 :(得分:0)

您可以使用JFormattedField,查看How to Use Formatted Text Fields,但他们不会限制用户输入他们想要的内容,而是会对值进行后验证以确定是否符合您需要的格式

您可以改用DocumentFilter,这样您就可以实时过滤输入。

查看Implementing a Document FilterMDP's Weblog示例

答案 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);
}
}