- - PR -
JTableの行の選択制御について
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-01-12 01:50
現在JTableを使用して下記のようなテーブルを作成しています。
・行の選択のみ許可 ・セルは全て編集不可 ・キーボード(十字キー等)での選択状態の変更は全て可 ・マウスによる行の選択は可 ・選択行の背景色を変更 ListSelectionListenerのvalueChangedで行選択時、選択行データによって removeColumnSelectionIntervalで選択状態を解除しているのですが、解除されません。 ご存知の方がいらっしゃいましたら、教えていただけませんか。 よろしくお願いいたします。 | ||||
|
投稿日時: 2007-01-12 17:58
removeColumnSelectionIntervalで削除されているのは、
列の選択状態であることは理解していますか? 列の選択状態は、removeColumnSelectionInterval()で指定した インデックスを選択状態から削除しているはずです。 以下のプロパティで行選択モードにした場合、 JTableがisCellSelected(int,int)でどのように判定しているかを JTableのソースを見れば、理解できるはずです。 setRowSelectionAllowed(true) setColumnSelectionAllowed(false) JTableがTableCellRendererに渡す、selected状態はデフォルトで isCellSelected(int,int)で判定しています。 もし、その動作がいやであれば、isCellSelected()またはprepareRendererをオーバーライドすればよいです。 | ||||
|
投稿日時: 2007-01-12 18:12
JTableはTableModelに対して操作した後に
validate()が必要だったりしませんでしたっけ。 選択状態の変更で必要だったかまでは把握していませんが。 | ||||
|
投稿日時: 2007-01-12 19:14
TableModelの内容(例えば、getRowCount()、getColumnCount())の変更があって、 JTableのPreferredSizeの変更を親コンポーネント(例えば、JScrollPane)に伝えたい とかでなければ、JTable固有の実装として、 invalidate(),validate(),revalidate()いずれも呼び出す必要はありません。 いなふみさんの場合、単純にTableCellRendererの実装ミスか、 isCellSelected(int,int)の戻り値を理解していないだけの気がします。 |
1