如何验证 JTable 单元格输入是否存在无效值
将 JTable 列的类类型定义为特定数字子类时,Swing 会自动拒绝用户输入不符合类型。例如,如果列定义为 Integer.class,则会拒绝 double 值。
要对非正值实现相同的效果,可以在表模型中重写 setValueAt 方法。然而,这种方法本身并不能向用户提供视觉反馈。
更完整的解决方案涉及使用自定义单元格编辑器。 PositiveIntegerCellEditor 就是这样的编辑器之一,它扩展了 DefaultCellEditor 并重写 stopCellEditing 方法来检查负值或零值。如果检测到无效值,编辑器会将单元格的边框设置为红色并取消编辑过程。
<code class="java">private static class PositiveIntegerCellEditor extends DefaultCellEditor { private static final Border red = new LineBorder(Color.red); private static final Border black = new LineBorder(Color.black); private JTextField textField; public PositiveIntegerCellEditor(JTextField textField) { super(textField); this.textField = textField; this.textField.setHorizontalAlignment(JTextField.RIGHT); } @Override public boolean stopCellEditing() { try { int v = Integer.valueOf(textField.getText()); if (v < 0) { throw new NumberFormatException(); } } catch (NumberFormatException e) { textField.setBorder(red); return false; } return super.stopCellEditing(); } @Override public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { textField.setBorder(black); return super.getTableCellEditorComponent( table, value, isSelected, row, column); } }</code>
要使用此编辑器,可以使用以下代码设置表格列的单元格编辑器:
<code class="java">table.getColumnModel().getColumn(columnIndex).setCellEditor(new PositiveIntegerCellEditor(new JTextField()));</code>
以上是如何验证 JTable 单元格输入的非正整数值?的详细内容。更多信息请关注PHP中文网其他相关文章!