JTable セルの入力検証が無効です
質問:
列がクラスタイプは、getColumnClass() メソッドを使用して Integer として指定されます。 Swing は、無効な入力 (double 値など) を自動的にマークし、拒否します。ただし、無効な整数入力のデフォルトの動作を模倣して、非正の整数入力 (負またはゼロ) に対するカスタム検証が必要です。
答え:
Swing とは異なります。イントロスペクションを使用して例外を検出するデフォルトのチェックでは、特定の検証にカスタム エディターを使用できます。たとえば、PositiveIntegerCellEditor を DefaultCellEditor のサブクラスとして作成して、タスクを実行できます。
stopCellEditing() メソッドで、入力を整数に変換する試みが行われます。値が正でない場合は、NumberFormatException がスローされ、textField が赤で囲まれ、無効な入力を示します。
<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>
無効な入力のあるセルをクリックすると、PositiveIntegerCellEditor が表示されます。アクティブ化され、編集モードを終了すると (Enter キーまたは Tab キーを押すなど)、stopCellEditing() メソッドが入力の変換を試みます。変換が失敗した場合 (つまり、入力が正でない場合)、textField の境界線は赤に設定され、フォーカスはセル上に残ります。
以上がJTable セルの非正の整数入力を検証するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。