2010-05-01 6 views

Antwort

1

Der folgende Link verweist auf einen Artikel, der feststellt, ob eine Zelle sichtbar ist. Sie könnten das verwenden - wenn die Zelle sichtbar ist, dann ist die Zeile sichtbar. (Aber natürlich nicht die ganze Zeile, wenn auch horizontales Scrollen vorhanden ist.)

Allerdings denke ich, dass dies scheitern wird, wenn die Zelle breiter als das Viewport ist. Um diesen Fall zu behandeln, ändern Sie den Test, um zu überprüfen, ob sich der obere/untere Rand der Zelle innerhalb der vertikalen Ausdehnung des Ansichtsfensters befindet, aber ignorieren Sie den linken/rechten Teil der Zelle. Am einfachsten ist es, die linke und die Breite des Rechtecks ​​auf 0 zu setzen. Ich habe auch die Methode so geändert, dass nur der Zeilenindex verwendet wird (kein Spaltenindex erforderlich), und true wird zurückgegeben, wenn die Tabelle nicht in einem Ansichtsfenster angezeigt wird um besser mit Ihrem Anwendungsfall übereinzustimmen.

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

Nun, diese Lösung zumindest mich auf dem richtigen Weg gebracht hat, hier ist was für mich gearbeitet: JViewport Ansichtsfenster = scrollPane1.getViewport(); Rechteck rect = myTable.getCellRect (rowToSelect, 1, true); if (! Viewport.contains (rect.getLocation())) myTable.scrollRowToVisible (rowToSelect); . . . Danke vielmals – Brad

Verwandte Themen