表を描く その1

俺得。なにか実用的なソフトを作ろうと思うと表が絶対出てくるんですよね
表というのはjTable。表にキーボードから打ち込んだセルの値を取ってくるまではググらなくても誰でもできるのだけどそれ以外が詰みやすい気がします
というのもテーブルモデルとjTable本体をごっちゃにしてしまうから(俺だけかもしれません)

まず表を作るのは簡単。jFrameにボタンを追加する要領でできる
列のタイトルとか行、列の数などの初期値は右クリ>表の内容から簡単に設定可能
セルに入れる値の型も指定できますがうまく働かないので自分で設定するか取ってきた値を適切に変換するのもありだと思います
ちゃんと動きます。例えばIntegerに指定してひらがなを入力すると枠が赤くなりエンターを押しても編集完了できません。

以後、表の変数名をtableとでもしておきます
Tips:「デザイン」画面、左下のナビゲータにて名前を変えたいコンポーネントを一度クリックしてF2を押すと簡単にリネームできます

1.セルの値を取得する

int row=0, column=1;
String val = table.getValueAt(row, column)+"";


0行目1列目のセルに入っている文字列を取ってきただけです。セルの内容はデフォルトでObjectを入れるようになってるので+""してます
+""って見た目もすっきりだし便利ですね

2.選択されているセルの座標を取得する

row=table.getSelectedRow();
column=table.getSelectedColumn();


これも簡単。この2つの関数名の後に"Count"がくっついた関数がありますがそれらは左上が1行目1列目からカウントされるタイプのもので要は上のやつをプラス1したものです
セルが選択されていなかった時は-1を返すそうです。Countの方は0だそうです

3.セルに値を格納する


これが若干遠回りな作業になります
使用頻度がそこそこあると思われるので冒頭で宣言します

public DefaultTableModel dtm;


これが表のモデルです。くわしいことは知りませんがこのdtmが表の本体、tableはそれを絵に描いたようなイメージだと思います
では実際に格納します

dtm = (DefaultTableModel) table.getModel();
dtm.setValueAt("あああ", row, column);
table.setModel(dtm);


1.tableのモデルを取得します
2.値を設定します
3.編集し終わったモデルで表を描き直します(何かこれいらないみたいです。表に反映されなかったらこれを書く感じで)

といった具合です。実用性を考えた場合(たとえば持ってる漫画とその最新巻を管理するとか)、項目の追加や変更、削除といった機能を実装するでしょうから、例のようにやっていては夜が明けてしまいます
そこでコレクションやらなんやらで表と同じような配列をつくりそこで各種編集を受け持ち、最後に表に書き込む形が最適でしょう
なので次はtable回りの関数は置いといて構造体的なクラス(ここらへんよくわかってない)を作ろうかと思います
さぞブサイクなクラスが出来上がるんだろうなぁ
ではまた眠れなくて暇を持て余した時にでも