テーブルセルへのユーザー入力を検証したいので、Nimbusのルックアンドフィールを使用します。整数入力を検証するセルエディタのコードは次のとおりです。WholeNumberField入力検証
を拡張JTextField
および追加します。
列に設定すると正常に機能しますが、テキストに対応できません。
デフォルトのセルエディタを使用すると、すべて問題なく表示されます。
このエディターをデフォルトのエディターのようにするにはどうすればよいですか?
テーブルセルへのユーザー入力を検証したいので、Nimbusのルックアンドフィールを使用します。整数入力を検証するセルエディタのコードは次のとおりです。WholeNumberField入力検証
を拡張JTextField
および追加します。
列に設定すると正常に機能しますが、テキストに対応できません。
デフォルトのセルエディタを使用すると、すべて問題なく表示されます。
このエディターをデフォルトのエディターのようにするにはどうすればよいですか?
WholeNumberFieldは古いコードです。本当にカスタム検証を行いたい場合は、DocumentFilterを使用する必要があります。
ただし、この場合、カスタムエディタを作成する必要はありません。JTableは、数値を検証するためのエディターをすでにサポートしています。isCellEditable(...)
返すには、JTableまたはTableModelのメソッドをオーバーライドするだけInteger.Class
で、適切なレンダラーとエディターが使用されます。
編集:私の提案が間違っていることに気づきました。
getColumnClass(...)
適切なレンダラー/エディターを使用できるように、Integer.classを返すようにオーバーライドする必要があります。isCellEditable(...)
メソッドは、セルを編集できるかどうかを判断するために使用されます。カスタムセルエディターコンストラクターに以下を追加すると、問題が解決することがわかりました。
Border border = UIManager.getBorder("Table.cellNoFocusBorder");
if (border != null) {
setBorder(border);
}
私のエディターはJTextFieldを拡張します。
fromのインスタンスを取得する場合、それはすでに例のように検証できるコンポーネントである必要があります。TableCellEditor
getDefaultEditor(Object.class)