0

这就是我所做的;但是此代码在某些情况下会失败,例如如果我们输入 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);
    }
});
4

1 回答 1

2

这是因为值 9874561231 超过了 int 最大值。

您可以将验证更改为:

  1. 用于Long.parseLong()支持更大的值。

  2. 使用正则表达式检查您的字符串

于 2012-03-08T06:49:23.817 回答