0

これまでのところ、JScrollPane の JViewPort オブジェクトを使用して、ある時点で特定の行を取得する方法を知っています。

scrollPane.getVerticalScrollBar().addAdjustmentListener(new AdjustmentListener() {

        @Override
        public void adjustmentValueChanged(AdjustmentEvent e) {
            JViewport viewport = scrollPane.getViewport();
            Point p = viewport.getViewPosition();
            int rowIndex = getLogsTable().rowAtPoint(p);
            System.out.println("Minimum Y: " + viewport.getViewRect().getMinY());
            System.out.println("Min row: " + getLogsTable().rowAtPoint(new Point(0, (int) viewport.getViewRect().getMinY())));
            System.out.println("Maximum Y: " + viewport.getViewRect().getMaxY());
            System.out.println("Max row: " + getLogsTable().rowAtPoint(new Point(0, (int) viewport.getViewRect().getMaxY())));
        }

    });

JViewport.getMinimumY() と JViewport.getMaximumY() の間のすべての行を取得する方法を理解するのに苦労しています。これらの 2 つのビューポート ポイント間のすべての行項目を収集する方法はありますか、または JScrollPane ビューですべての行を取得する方法はありますか?

4

1 に答える 1

1

@dic19 のコメントに基づいて、そのコードのスニペットを使用しましたが、うまくいきました。最後の行のインデックス番号の取得を処理するために、追加の変数を追加しました。

// need to wait for table to fully load
    SwingUtilities.invokeLater(new Runnable() {

        @Override
        public void run() {

            // getLogsTable() returns JTable instance
            Rectangle vr = getLogsTable().getVisibleRect();
            int firstRow = getLogsTable().rowAtPoint(vr.getLocation());
            vr.translate(0, vr.height);
            int visibleRows = getLogsTable().rowAtPoint(vr.getLocation()) - firstRow;
            int lastRow = (visibleRows > 0) ? visibleRows+firstRow : getLogsTable().getRowCount();

            System.out.println("first visible row: " + firstRow + " last visible row: " + lastRow);

            for(int rowNum=firstRow+1; rowNum<=lastRow; rowNum++) {
                    // LogsModel is a AbstractTableModel instance
                    LogsModel model = (LogsModel) getLogsTable().getModel();
                    Log log = model.getData().get(getLogsTable().convertRowIndexToModel(rowNum-1));
                    System.out.println(log.getLocation());
            }

            System.out.println(lastRow);
        }

    });
于 2014-08-29T18:58:50.697 に答える