何の記事?
Clojureの勉強中のためにSwingを使ってCSVエディタのようなものを作っていたときに、
JTableのカラムってどうやって削除するの?って調べてたのでメモ程度に残しておきます。
やり方
TableModelからgetDataVectorでテーブルデータを取得して変更し、再設定します。
TableModelはDefaultTableModelとします。
;; 2次元のVector中のすべてのVectorから特定のindexの要素を削除する
(defn remove-nth [v n]
(loop [i 0]
(if (= i (.. v (size)))
v
(do
(.. v (elementAt i) (removeElementAt n))
(recur (+ i 1))))))
;; カラムを削除
;; ※とりあえずカラム名は適当につけます
(defn removeColumn [model n]
(let [v (.. model (getDataVector))]
(remove-nth v n)
(.. model
(setDataVector v (new java.util.Vector (range 0 (.. v (elementAt 0) (size))))))))
こんなかんじでカラムを削除できます。
;; インデックス2のカラムを削除する
(removeColumn model 2)