JTable Viewport - Ausgabe der sichtbaren Spalten

Status
Nicht offen für weitere Antworten.

Dr.Gibble

Mitglied
Hallo miteinander,

ich habe ein kleines Problem mit meiner JTable und benötige Eure Hilfe.
Ich habe eine JTable die sich dynamisch mit Daten füllen lässt. Die Tabelle wiederum liegt in einem JScrollPane in der ich für die horizontale Scrollbar einen AdjustmentListener(adjustmentValueChanged) registriert habe.

Wenn ich die Tabelle nun horizontal scrolle kann ich den aktuellen Viewport mit getViewport().getViewRect() oder getPreferredScrollableViewportSize() holen der mir den aktuell sichtberen Bereich der Tabelle zeigt.

Was ich nun benötige sind die Nummern der aktuell sichtbaren Spalten der Tabelle auf dem Bildschirm
Bsp: Tabelle mit 100 Spalten ... Spalte 30-45 liegen im aktuell sichtbaren Bereich

Leider habe ich in den letzten 2 Tagen Recherche nichts passendes gefunden oder nur einen falschen Anhaltspunkt wonach ich genau suchen muss.

Mir reicht es wenn ich die sichtbaren Spalten als int-Wert zurückbekomme. Die darin enthaltenen Werte benötige ich nicht.
Diese benötige ich für meinen Chart der dementsprechend zu den aktuell sichtbaren Spalten der Tabelle seinen Bereich der X-Achse anpassen soll.

Für jeden Tip oder einen Beispielcode wäre ich sehr dankbar.

Gruß Boris
 
Mit JTable#getCellRect haben wir die Möglichkeit zu prüfen,
ob eine bestimmte Spalte im sichtbaren Bereich liegt. Beispiel:
Code:
public void adjustmentValueChanged(final AdjustmentEvent e) {
    if (e.getValueIsAdjusting()) return;
    Rectangle v = table.getVisibleRect();
    for (int column = 0; column < table.getColumnCount(); column++) {
        Rectangle c = table.getCellRect(-1, column, true);
        if (v.x <= c.x && v.x + v.width >= c.x + c.width) {
            System.out.print(column + " ");
        }
    }
}
Siehe auch: Java: Swing: JTable and TableModel: FAQ
 
Vielen Dank!

Diesen Ansatz hatte ich gestern auch verfolgt. Einfach die Breite einer Spalte samt Border ausgeben lassen und prüfen ob sie im sichtbaren Bereich liegt. Aber mit den Tabellen stehe ich irgendwie auf Kriegsfuss.

Nochmals besten Dank für den Beispielcode. Der hat mir sehr geholfen und ich kann endlich an dieser Stelle des Projektes weiterarbeiten.

Gruß Boris
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben