如何驗證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中文網其他相關文章!