セルエディタと型

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, できなければ入力エラーとしていた. 単純明快.