2010-05-01 14 views

risposta

1

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); 
} 
+0

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

Problemi correlati