- PR -

JTableの行の選択制御について

1
投稿者投稿内容
いなふみ
常連さん
会議室デビュー日: 2005/09/14
投稿数: 20
投稿日時: 2007-01-12 01:50
現在JTableを使用して下記のようなテーブルを作成しています。

・行の選択のみ許可
・セルは全て編集不可
・キーボード(十字キー等)での選択状態の変更は全て可
・マウスによる行の選択は可
・選択行の背景色を変更

ListSelectionListenerのvalueChangedで行選択時、選択行データによって
removeColumnSelectionIntervalで選択状態を解除しているのですが、解除されません。

ご存知の方がいらっしゃいましたら、教えていただけませんか。

よろしくお願いいたします。
nekoyama
ベテラン
会議室デビュー日: 2005/03/12
投稿数: 71
投稿日時: 2007-01-12 17:58
removeColumnSelectionIntervalで削除されているのは、
列の選択状態であることは理解していますか?
列の選択状態は、removeColumnSelectionInterval()で指定した
インデックスを選択状態から削除しているはずです。

以下のプロパティで行選択モードにした場合、
JTableがisCellSelected(int,int)でどのように判定しているかを
JTableのソースを見れば、理解できるはずです。

setRowSelectionAllowed(true)
setColumnSelectionAllowed(false)

JTableがTableCellRendererに渡す、selected状態はデフォルトで
isCellSelected(int,int)で判定しています。

もし、その動作がいやであれば、isCellSelected()またはprepareRendererをオーバーライドすればよいです。

nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-01-12 18:12
JTableはTableModelに対して操作した後に
validate()が必要だったりしませんでしたっけ。

選択状態の変更で必要だったかまでは把握していませんが。
nekoyama
ベテラン
会議室デビュー日: 2005/03/12
投稿数: 71
投稿日時: 2007-01-12 19:14
引用:

nagiseさんの書き込み (2007-01-12 18:12) より:
JTableはTableModelに対して操作した後に
validate()が必要だったりしませんでしたっけ。

選択状態の変更で必要だったかまでは把握していませんが。



TableModelの内容(例えば、getRowCount()、getColumnCount())の変更があって、
JTableのPreferredSizeの変更を親コンポーネント(例えば、JScrollPane)に伝えたい
とかでなければ、JTable固有の実装として、
invalidate(),validate(),revalidate()いずれも呼び出す必要はありません。

いなふみさんの場合、単純にTableCellRendererの実装ミスか、
isCellSelected(int,int)の戻り値を理解していないだけの気がします。
1

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