Swing JTable: событие, когда строка видна или когда прокручивается вниз? - PullRequest
6 голосов
/ 19 ноября 2011

Я ищу способ получить информацию, когда JTable прокручивается так, что конкретная строка становится видимой, или не удается это сделать, когда внизу таблицы прокручивается в поле зрения.В идеале это должно быть сделано без опроса, но через некоторое событие.есть идеи?

1 Ответ

12 голосов
/ 19 ноября 2011

Добавьте ChangeListener в область просмотра области прокрутки.

    viewport = scrollpane.getViewport();
    viewport.addChangeListener(this);

, затем проверяются видимые строки (также могут быть легко расширены на столбцы)

public void stateChanged(ChangeEvent e)
{
    Rectangle viewRect = viewport.getViewRect();
    int first = table.rowAtPoint(new Point(0, viewRect.y));
    if (first == -1)
    {
        return; // Table is empty
    }
    int last = table.rowAtPoint(new Point(0, viewRect.y + viewRect.height - 1));
    if (last == -1)
    {
        last = tableModel.getRowCount() - 1; // Handle empty space below last row
    }

    for (int i = first; i <= last; i++)
    {
        int row = sorter.convertRowIndexToModel(i); // or: row = i
        //... Do stuff with each visible row
    }

    if (last == tableModel.getRowCount() - 1) {} //... Last row is visible
}

Игнорируйте sorter, если ваш стол не сортируется.

...