Il collegamento riportato di seguito riguarda un articolo che determina se una cella è visibile. Potresti usarlo: se la cella è visibile, la riga è visibile. (Ma ovviamente, forse non l'intera riga, se è presente anche lo scorrimento orizzontale.)
Tuttavia, penso che questo non riuscirà quando la cella è più ampia della finestra. Per gestire questo caso, si modifica il test per verificare se la parte superiore/inferiore dei limiti della cella si trova entro l'estensione verticale della finestra, ma ignora la parte sinistra/destra della cella. È più semplice impostare la sinistra e la larghezza del rettangolo a 0. Ho anche cambiato il metodo per prendere solo l'indice di riga (non c'è bisogno dell'indice di colonna) e restituisce true
se la tabella non è in una finestra, che sembra per meglio adattarsi al caso d'uso.
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);
}
Bene, questa soluzione, almeno mi ha messo sulla strada giusta, ecco cosa ha funzionato per me: JViewport viewport = scrollPane1.getViewport(); Rectangle rect = myTable.getCellRect (rowToSelect, 1, true); if (! Viewport.contains (rect.getLocation())) myTable.scrollRowToVisible (rowToSelect); . . . molte grazie – Brad