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]


[sb 1.10R]