セルエディタと型
JTable がデフォルトで用意するセルエディタは, 実は入力チェックつきだった. デフォルトで対応しているのは, String/Integer/Boolean の 3 つ.
TableModel の getClumnClass(int) で String/Integer/Boolean のいずれかの型を返すと, その型に応じた入力チェック付きのエディタを選んでくれる. 入力チェックにひっかかると, セルのボーダーが赤くなる.
以下はすべてのカラムを Integer にするサンプル。ついでにエディタから編集後の値を設定されるときに, その値の型を出力したりしてる。
DefaultTableModel model = new DefaultTableModel() { @Override public boolean isCellEditable(int r, int c) { return true; } @Override public Class<?> getColumnClass(int c) { return Integer.class; } @Override public void setValueAt(Object o, int r, int c) { super.setValueAt(o, r, c); System.out.printf("[%d,%d] = %s%n", r, c, o.getClass()); } };
入力チェックのみならず, setValueAt に渡される値も, そのカラムの型に変換してから渡してくれる.
変換や入力チェックをどうやってるのかなと調べてみたところ, 単純にコンストラクタ引数に文字列を渡して, インスタンス化できればOK, できなければ入力エラーとしていた. 単純明快.