2010-05-01 7 views

Odpowiedz

1

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

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

Powiązane problemy