如何防止在JTable单元格中输入除数字之外的字符?

BK *_*ati 1 java validation swing jtable keylistener

我正在一个项目中工作,我必须通过使用JTable从用户那里获得输入.在这里,我创建了一个只有数值的JTable.我在keyTyped上验证了它并且工作正常,直到我按F2或单击单元格.当我这样做时,它将光标放在单元格中,其他字符也被输入.

jtblValues.addKeyListener(new KeyListener() {
        public void keyPressed(KeyEvent e) {
            if (e.getKeyCode()==KeyEvent.VK_ENTER && (jtblValues.getRowCount() == (jtblValues.getSelectedRow()+1))) 
                model.addRow(new Object[]{"", "", ""}); 
            else if (e.getKeyCode()==KeyEvent.VK_TAB && (jtblValues.getRowCount() == (jtblValues.getSelectedRow()+1)) && (jtblValues.getColumnCount() == (jtblValues.getSelectedColumn()+1)))
                model.addRow(new Object[]{"", "", ""}); 
        }
        public void keyReleased(KeyEvent e) {}
        public void keyTyped(KeyEvent e) {
            char c = e.getKeyChar();
            if (!((c >= '0') && (c <= '9') || (c == KeyEvent.VK_BACK_SPACE) || (c == KeyEvent.VK_DELETE) || (c == KeyEvent.VK_ENTER) || (c == KeyEvent.VK_TAB))) {
                getToolkit().beep();
                e.consume();
            }
        } 
    } );
Run Code Online (Sandbox Code Playgroud)

那么,如何通过键入除数字之外的其他字符来阻止用户?

谢谢.

dic*_*c19 5

您可以通过提供适当的TableCellEditor来实现此目的,如使用编辑器验证用户输入的文本部分中的" 如何使用表格"教程中所述.

关键是使用JFormattedTextfield作为NumberFormatterNumberFormat的编辑器.例如:

NumberFormat integerFormat = NumberFormat.getIntegerInstance();
NumberFormatter formatter = new NumberFormatter(integerFormat);
formatter.setAllowsInvalid(false);
JFormattedTextField textfield = new JFormattedTextField(formatter);
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参见如何使用格式化文本字段教程.

无关

当您使用Swing时,最好使用Keybinding而不是KeyListeners,原因是本主题中讨论的原因:Java中的键绑定与键侦听器.请参阅教程以使用KeyBinding开始:如何使用键绑定