JTableのセルカーソルの位置(その2)

2019.04.24 (水) 22:59
ugnag


JTableのセルカーソルの位置の取得だが、

一応、いろいろと試してみた結果、なんとかなったのではないかと思うので、報告してみる。




基本的には、JTable#changeSelectionメソッドをオーバーライドするしかないようだ。

個人的な方針として、JTableをオーバーライドしたくはないのだが、
他に方法が無さそうなのでしかたない。


このメソッドは、JTableの行又は列の選択に変化があるときには、
必ず呼び出される。

そのため、このメソッドをオーバーライドし、もともとの処理の終了後にイベントという形で、通知するのがいいかと思う。

イベントとなると、インターフェースやらイベントオブジェクトやらを作らなければならないが、

今回は、既に実装されているPropertyChangeListenerを使ってしまうことにした。


つまり、JTableのセルカーソルの位置が変わった際には、

PropertyChangeListenerに対しイベントを発生させる。
その際のプロパティ名は、"cell_cursor_position_changed"とでもしよう。



PropertyChangeListenerならリスナーの追加や削除、イベントの発火などの機能は実装されているので楽だ。


また、どうせJTableをカスタマイズするなら、セルカーソルの位置を取得するメソッドも実装してしまった方が便利だ。


public JTableEx extends JTable
{
    static public String Prop_CellCursorChanged = "cell_cursor_position_changed";

    @override
    public Point getCellCursorPosition(){

        int r = getSelectionModel().getLeadSelectionIndex();
        int c = getTableHeader().getColumnModel().getSelectionModel().getLeadSelectionIndex();


        return new Point(c, r);

    }


    @Override
    public void changeSelection(int rowIndex, int columnIndex, boolean toggle, boolean extend) {

[7] beginning... [9] >>
[1] comments (0)
-




[0] [top]


[sb 1.10R]