Java 如何验证jtable中只能接受手机号码的列?

Java 如何验证jtable中只能接受手机号码的列?,java,hibernate,swing,jtable,tablecelleditor,Java,Hibernate,Swing,Jtable,Tablecelleditor,这就是我所做的;但在某些情况下,此代码会失败,例如,如果输入9874561231,则无法插入此号码 tbl.setCellEditor(new DefaultCellEditor(text){ @Override public Object getCellEditorValue() { // throws exception if parsing failes, and it's catched on stopCellEditing return

这就是我所做的;但在某些情况下,此代码会失败,例如,如果输入9874561231,则无法插入此号码

tbl.setCellEditor(new DefaultCellEditor(text){

    @Override
    public Object getCellEditorValue() {
        // throws exception if parsing failes, and it's catched on stopCellEditing
        return  Integer.parseInt((String) super.getCellEditorValue());
    }

    @Override
    public boolean stopCellEditing() {
        boolean result = false;
        try{
          result = super.stopCellEditing();
          ((JTextField)getComponent()).setBackground(Color.WHITE);
          lblEnterNumbersOnly.setVisible(false);
        } catch (NumberFormatException e) {
          ((JTextField)getComponent()).setBackground(Color.RED);
          lblEnterNumbersOnly.setVisible(true);
          result = false;
        }

        return result;
    }

    @Override
    public boolean isCellEditable(EventObject anEvent) {
        // reset color when begin editing
        ((JTextField)getComponent()).setBackground(Color.WHITE);
        return super.isCellEditable(anEvent);
    }
});

这是因为值9874561231超过了int max值

您可以将验证更改为:

  • 使用
    Long.parseLong()
    支持更大的值

  • 使用正则表达式检查字符串


  • 我想再做一次验证,比如单元格只能接受10个数字。我如何修改这个代码?你是说只能接受10个数字?您可以首先通过String.length检查字符串的长度,因此如果它满足您的要求,那么就解析该值(用于使用Long.parseLong)。如果您使用regex,您可以做得更简单。对于regex,模式是/^[0-9]{1,10}$/。如果您认为这个答案有帮助,请接受它。您使用的是String.mathces(regex)吗?如果是yse,正则表达式是“[0-9]{1,10}”。上面的一个是使用Pattern和Matcher类