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)
那么,如何通过键入除数字之外的其他字符来阻止用户?
谢谢.
您可以通过提供适当的TableCellEditor来实现此目的,如使用编辑器验证用户输入的文本部分中的" 如何使用表格"教程中所述.
关键是使用JFormattedTextfield作为NumberFormatter和NumberFormat的编辑器.例如:
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开始:如何使用键绑定
| 归档时间: |
|
| 查看次数: |
3069 次 |
| 最近记录: |