表を描く その3 選択されたセルの値を他の場所に表示する
やっぱり表をいじるときは、セルまたは行を選択した時にどこかのテキストフィールドに表示して、それを書き換えて編集ボタンをクリックすると表の内容が変わるっていうのがかっこいいですよね
そこで普通ならデザイン画面でおもむろに表を右クリックして「セルが選択された」イベントを探すものなんですが(真似してはいけない。原理を理解しようとしないクズの例)、みつかりません
またセルの選択方法には方向キーやマウスクリック、他の処理によるものなどいろいろあるのでいちいち書くのは面倒です
いい方法を知らなかった頃は、クリックではなくマウスが動いたら、というイベントで処理してました
こうするとクリックしても値が変わらずユーザーが「あれ?フリーズ?」とマウスを動かすと更新されるという斬新な動きをするのです
で、まぁぐぐるとちゃんと選択されたイベントを拾うリスナーがあったので使います(javax.swing.eventのListSelectionEventとListSelectionListener)
便利なのになんでデフォルトで入ってないんでしょうね
GUIを作る部分のコードは通常画面ではいじれない(灰色になってる)ので、表を右クリ>コードをカスタマイズ で一番下の行にこれをコピペします
table.getSelectionModel().addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent e) { if(e.getValueIsAdjusting()) return; int sc = table.getSelectedRow(); if(sc>-1){ rowSelected(sc); } } });
まぁ意味不明ですね。とりあえずこれで行選択を拾ってくれるようになりました。選択された行の行数を引数としたrowSelected(sc)をどこかに書けば完了です
private void rowSelected(int row) { bookName.setText(table.getValueAt(row, 0) + ""); bookVolume.setText(table.getValueAt(row, 1) + ""); }
いつもの例で行くとこのように書名と巻数をそれぞれ行数を頼りに取ってきて表示します
表を扱うソフトを作るときこのイベントは必須なのでどうにかnetbeansに組み込めないかと日々模索中です