- PR -

JTableでの行の選択方法

1
投稿者投稿内容
じんぱち
会議室デビュー日: 2003/04/08
投稿数: 4
投稿日時: 2003-11-19 10:49
お世話になっています。

現在JTableを使用して下記のようなテーブルを作成しようとしているのですが
うまくいきません。
ご存知の方がいましたらご教授いただけないでしょうか。

・行の選択のみ許可
・セルは全て編集不可
・キーボード(十字キー等)での選択状態の変更は全て不可
・マウスによる行の選択は不可
#行の選択は全てプログラム内で行いたいのですが…

行選択許可とキーボードでの選択状態の変更はできたのですが、
マウスによる行の選択不可が実現できません。
ためしに、JTableにMouseLisnerを設定してみたのですが、
MouseEventが発生した時には既にテーブル行は選択されてしまっていました。

JTable上でのマウスクリックされた際の動作について
ご存知の方がいらっしゃいましたら、教えていただけませんか。

よろしくお願いいたします。
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2003-11-19 12:34
JTableのMouseアクションはjavax.swing.plaf.basic.BasicTableUI$MouseInputHandlerで管理されています。
このクラスからのインスタンス化は、BasicTableUI#createMouseInputListner()で行われています。
従って、BasicTableUIのサブクラスを作り、createMouseInputListner()で何も実行しないMouseInputListnerを返してやれば、テーブルのマウスアクションを切ることは可能だと思います。

しかし、swingはL&Fを自由に切りかえることができるため、上述のことをしてしまうと、切り替えはできなくなってしまいます(できないことはないがいじる所が多すぎる)。

うまくいくかどうかは分かりませんが、現実的な解決策として、基本的に選択不可にし、プログラマブルに選択するときに選択可にして選択処理を行った後、選択不可に戻すというのはいかがでしょう。
じんぱち
会議室デビュー日: 2003/04/08
投稿数: 4
投稿日時: 2003-11-19 23:09
かずくんさん

ご教授ありがとうございました。
BasicTableUIのサブクラスを作り、createMouseInputListner()を
オーバライドしたものをJTable#setUI()することで可能になりました。

ちなみに最初

table.setRowSelectionAllowed(true); //行の選択を許可する
table.chipTable.setRowSelectionInterval(0,0);
table.setRowSelectionAllowed(false); //行の選択を不可にする

としてみたのですが、こちらの方は
setRowSelectionAllowed(false)で選択状態が解除されてしまうようで
うまくいきませんでした。。。
1

スキルアップ/キャリアアップ(JOB@IT)