3 Stimmen

So ersetzen Sie eine untergeordnete JScrollPane-Komponente

Ich habe ein JPanel, das ein JScrollPane enthält, das eine JTable enthält. Innerhalb meines Panel-Konstruktors wird es auf diese Weise erstellt:

    //inside MyPanel extends JPanel class constructor
public void MyPanel(){
    TitledBorder border = BorderFactory.createTitledBorder("title");
    this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
    this.scrollTable = new JScrollPane(table);
    this.scrollTable.setBorder(border);
}

Nun soll der Benutzer eine andere Tabelle in die Anwendung laden können, also muss ich die vorherige Tabelle aus dem Bildlauffeld entfernen und eine neue Tabelle hinzufügen. Ich habe das Folgende versucht:

public void setNewTable(JTable t ) {
    this.scrollTable.removeAll();
    this.scrollTable.add(t);
    this.scrollTable.validate();

}

Die vorherige Tabelle wird entfernt, aber im JScrollPane passiert jetzt nichts mehr.

Was mache ich falsch?

public void

5voto

Reverend Gonzo Punkte 37720

Sie können JScrollPane nicht einfach hinzufügen, da es aus anderen internen Komponenten besteht.

Von der JavaDocs :

enter image description here

Durch den Aufruf von scrollPane.removeAll() entfernen Sie im Wesentlichen die Kopfzeile, die Ansicht und die Bildlaufleisten und fügen eine Komponente hinzu, die das Scrollpane nicht versteht.

Zunächst einmal sollten Sie die Tische im Allgemeinen nicht auf diese Weise herumreichen. Es wäre viel besser, wenn Sie stattdessen eine TableModel und ändern Sie das Modell der Tabelle mit JTable.setModel().

Das heißt, wenn Sie unbedingt eine Tabelle einfügen wollen, müssen Sie die Ansicht auf das Ansichtsfenster im Bildlaufbereich einstellen:

scrollPane.getViewport().setView(table)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X