JTableのセルカーソルの位置
2019.04.23 (火) 23:46
ugnag
結論から言うと、JTable自体のメソッドでは取得できない模様。
しかし、以下のようにすればわかるようだ。
int rowIndex = jtable.getSelectionModel().getLeadSelectionIndex();
int colIndex = jtable.getTableHeader().getColumnModel().getSelectionModel().getLeadSelectionIndex();
ListSelectionModelのleadSelectionIndexというのが、セルカーソルの位置を記憶するためのもののようだ。
ちなみに、もうひとつ、ListSelectionModelでよくわからなかい使い方をするanchorSelectionIndexだが、
この値の使い方は、複数行選択可能なモードで、複数行を選択するためにテーブルをドラッグするが、
そのときの、選択開始となる場所のようだ。
このときセルカーソルは、マウスカーソルの位置(つまり最後に選択された位置と同じ)になる。
なので、0行目から3行目をドラッグして選択すると、
anchorSelectionIndex : 0
leadSelectionIndex : 3
となる。(セルカーソルは3行目)
また、5行目から2行目のいうように、下から上へ選択してみると、
anchorSelectionIndex : 5
leadSelectionIndex : 2
となる。(セルカーソルは2行目)
以上のことが実験でわかったので、セルカーソルはleadSelectionIndexの値ということで問題ないと思われる。
ただし、この値を取得するのに、ListSelectionModel.addListSelectionListener()を使って、
位置が変更されたタイミングで行おうとすると、注意が必要だ。
というのは、行のListSelectionModelでは、列位置だけが変わってもイベントが発生しないし、逆に列のModelでは行だけ変わっても
やはりイベントは発生しない。
また、イベントが発生する順番は、
1.行のイベント
2.列のイベント
という順番のようだが、以前は逆だったという気もするので、
順番が保証されているという前提にしてしまうのは危険だ。
さらに、行のイベントが発生した際には、列の位置は変更されていない。
つまり、縦横の位置を知るには、列のイベントでチェックするしかないが、それだと行のみの変更の際には処理できない。
全く困ったものである。
[7] beginning... [9] >>
[1] comments (0)
-
[0] [top]