2010-05-01 9 views

Respuesta

1

El siguiente enlace es un artículo que determina si una celda está visible. Podría usar eso: si la celda está visible, entonces la fila es visible. (Pero, por supuesto, posiblemente no toda la fila, si también está presente el desplazamiento horizontal).

Sin embargo, creo que esto fallará cuando la celda sea más ancha que la ventana gráfica. Para manejar este caso, cambie la prueba para verificar si la parte superior/inferior de los límites de la celda está dentro de la extensión vertical de la ventana gráfica, pero ignore la parte izquierda/derecha de la celda. Es más simple establecer el ancho y el rectángulo del rectángulo a 0. También he cambiado el método para tomar solo el índice de la fila (no es necesario el índice de la columna) y devuelve true si la tabla no está en una ventana gráfica, lo que parece para alinear mejor con su caso de 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

Pues bien, esta solución, al menos, me ha puesto en el camino correcto, esto es lo que funcionó para mí: JViewport ventana = scrollPane1.getViewport(); Rectángulo rect = myTable.getCellRect (rowToSelect, 1, verdadero); if (! Viewport.contains (rect.getLocation())) myTable.scrollRowToVisible (rowToSelect); . . . Muchas gracias – Brad

Cuestiones relacionadas