java - 如何获取 JScrollPane 中 JTable 模型的所有可见行

标签 java swing jtable jscrollpane jviewport

到目前为止,我知道如何使用 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() 之间的所有行。有没有办法收集这两个视口(viewport)点之间的所有行项目,或者有没有办法只获取 JScrollPane View 中的所有行?

最佳答案

根据@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);
        }

    });

关于java - 如何获取 JScrollPane 中 JTable 模型的所有可见行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25530004/

相关文章:

java - JTable RowFilter 是如何工作的?

java - 为什么 toBinaryString 不是 Integer 类中的实例方法?

java - hibernate + jtable + 和自动刷新

java - android java线程中的新ArrayAdapter

java - 如何删除 Java 7 上打印对话框中的 Java 图标

java - 制作幻灯片程序

java - 刷新 JPanel-移动 JLabel

java - TableModel 和 CellRenderer 的值差异

java - 我使用 javascript 创建了一个 html 文件来在 firebase 中存储图像,但是如果我运行 html 并单击选择文件,它会在控制台中显示错误

java - 优秀的 Java 格式化文本字段库