Poniższy link jest artykułem, który określa, czy komórka jest widoczna. Możesz tego użyć - jeśli komórka jest widoczna, wtedy rząd jest widoczny. (Ale oczywiście, może nie cały wiersz, jeśli obecne jest również przewijanie w poziomie).
Jednak myślę, że to się nie powiedzie, gdy komórka jest szersza niż okienko ekranu. Aby obsłużyć tę sprawę, należy zmienić test, aby sprawdzić, czy górna/dolna granica komórek znajduje się w pionowym zakresie widoku, ale zignoruj lewą/prawą część komórki. Najprościej ustawić lewą i szerokość prostokąta na 0. Zmieniono również metodę, aby wziąć tylko indeks wiersza (nie ma potrzeby użycia indeksu kolumny) i zwracana jest true
, jeśli tabela nie znajduje się w oknie roboczym, co wydaje się lepiej dopasować do przypadku użycia.
public boolean isRowVisible(JTable table, int rowIndex)
{
if (!(table.getParent() instanceof JViewport)) {
return true;
}
JViewport viewport = (JViewport)table.getParent();
// This rectangle is relative to the table where the
// northwest corner of cell (0,0) is always (0,0)
Rectangle rect = table.getCellRect(rowIndex, 1, true);
// The location of the viewport relative to the table
Point pt = viewport.getViewPosition();
// Translate the cell location so that it is relative
// to the view, assuming the northwest corner of the
// view is (0,0)
rect.setLocation(rect.x-pt.x, rect.y-pt.y);
rect.setLeft(0);
rect.setWidth(1);
// Check if view completely contains the row
return new Rectangle(viewport.getExtentSize()).contains(rect);
}
Cóż, to rozwiązanie przynajmniej postawił mnie na właściwą drogę, oto co pracował dla mnie: JViewport rzutnia = scrollPane1.getViewport(); Prostokąt rect = myTable.getCellRect (rowToSelect, 1, true); if (! Viewport.contains (rect.getLocation())) myTable.scrollRowToVisible (rowToSelect); . . . Wielkie dzięki – Brad