0

行の高さが可変で定期的に更新されるJTableの一番下(scrollPane内)に自動的にスクロールしようとしています。オーバーライドできるリスナー、またはリッスンできるイベントはありますか?それは、テーブルが下部に新しい行で再描画された後に発生しますか?

列のレンダラーをオーバーライドして、列のテキストが列の幅で1行に表示できるよりも長い場合に行の高さをリセットすることで、可変の高さを実装しました。

private void adjustRowHeight( )
{
    if ( _table == null )
    {
        return;
    }

    int cWidth = _table.getTableHeader().getColumnModel().getColumn(_column).getWidth();
    _textComponent.setSize( new Dimension( cWidth - 2*HORIZONTAL_GAP, MAX_HEIGHT ) );
    int prefH = _textComponent.getPreferredSize().height;

    boolean isTooBig = prefH > MAX_HEIGHT;

    if (isTooBig)
    {
        prefH = MAX_HEIGHT;
    }

    _table.setRowHeight(_row, prefH + 2 );
}

私のscrollToBottomコードは以下の通りです。

行を可変の高さにする前は、これはMAX_VALUEではなく行数を参照していましたが、有効な行インデックスを参照すると、可変の行の高さではなく、デフォルトの行の高さを使用して行の位置が計算されます。

 _table.scrollRectToVisible( _table.getCellRect( Integer.MAX_VALUE, 0, true ) );

Integer.MAX_VALUEを使用すると、デフォルトの計算がオーバーライドされ、テーブルの高さが長方形のy値として使用されます。新しい行がテーブルに追加されていても、テーブルが再描画される(および高さがリセットされる)前に、このコードが呼び出されていると思います。テーブルの高さがリセットされたことを知るために聞くことができるイベントがありますか?それで、scrollToBottomを実行できますか?それとも私がここで見逃している何かがありますか?

4

2 に答える 2

2

2つの方法があります、

  • と一緒に移動JScrollBar

  • と一緒に移動JViewport

私もこの方法を好むでしょう、そしてこれPointとその座標で管理することが可能です、例えば

オーバーライドできるリスナー、またはリッスンできるイベントはありますか?それは、テーブルが下部に新しい行で再描画された後に発生しますか?

テーブルの高さがリセットされたことを知るために聞くことができるイベントがありますか?それで、scrollToBottomを実行できますか?

private void addTableListener() {
    model.addTableModelListener(new TableModelListener() {

        @Override
        public void tableChanged(TableModelEvent tme) {
            if (table.getRowCount() > 0) {
                if (tme.getType() == TableModelEvent.INSERT) {
                   
                } else if (tme.getType() == TableModelEvent.DELETE) {
                    
                } else if (tme.getType() == TableModelEvent.UPDATE) {
                   
                }
            }
        }
    });
}

すべてがodに依存しますListSelectionModel

于 2012-10-12T17:12:44.270 に答える
0

オーバーライドできるリスナー、またはリッスンできるイベントはありますか?それは、テーブルが下部に新しい行で再描画された後に発生しますか?

テーブルの高さがリセットされたことを知るために聞くことができるイベントがありますか?それで、scrollToBottomを実行できますか?

はい。JTableの親クラスにあり、メソッドComponent#addComponentListener( ComponentListener )をオーバーライドできます。componentResized

于 2012-10-12T18:35:36.110 に答える