特定の値を拒否するように JTable セルの入力検証をカスタマイズする方法
JTable はデフォルトで、強制できない値を拒否することで入力検証を実行します。指定された列クラスタイプ。たとえば、列のクラス タイプが Integer に設定されている場合、整数以外の値は自動的に拒否され、セルのアウトラインが赤に設定されます。
デフォルトの型チェックを超えてセル入力を検証したい場合は、テーブルのモデルの setValueAt メソッドをオーバーライドできます。ただし、このアプローチは入力が受け入れられなくなるだけであり、型チェッカーと同じ視覚的なフィードバックはトリガーされません。
セル エディターを使用したカスタム検証の実装
するにはカスタム検証ルールに対して同じ検証と視覚的なフィードバックを実現するには、カスタム セル エディターの使用を検討してください。この場合、次のような DefaultCellEditor のサブクラスを作成します。
例: 正の整数用のカスタム セル エディタ
例は次のとおりです。正の整数を検証し、それに応じてセルの境界線の色を設定するカスタム セル エディターの例:
<code class="java">import javax.swing.*; import javax.swing.table.*; 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>
目的の列のセル エディターをカスタム実装に設定することで、目的の検証動作と視覚的なフィードバックを実現できます。ユーザーが正以外の値を入力したとき。
以上がJTable セルにカスタム検証を実装し、視覚的なフィードバックを提供する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。