Entfernen der Spalte aus TableModel in Java

8

In Java verwende ich das DefaultTableModel, um dynamisch eine Spalte zu einer JTable hinzuzufügen.

%Vor%

Die Variable columnNames ist ein String-Array mit den Spaltennamen. Nachdem das Programm ausgeführt wurde, kann der Benutzer zusätzliche Spalten hinzufügen. Ich mache das wie folgt

%Vor%

Dies fügt die Spalte dynamisch der Tabelle wie gewünscht hinzu. Der Benutzer kann auch hinzugefügte Spalten entfernen. Dafür benutze ich den folgenden Code:

%Vor%

was die Spalte bei einem bestimmten Index entfernen sollte, habe ich auch versucht:

%Vor%

Beide funktionieren (visuell), aber hier ist das Problem. Wenn nach dem Löschen einer hinzugefügten Spalte eine andere Spalte hinzugefügt und die Tabelle aktualisiert wird, ist die zuvor gelöschte Spalte wieder vorhanden. Während also die Spalte visuell entfernt wird, entfernt keines der letzten zwei Code-Snippets es tatsächlich aus dem Modell. Ich gehe hier davon aus, dass, seit die Spalte zu dem Modell hinzugefügt wurde, von wo es entfernt werden muss? Gibt es eine bestimmte Methode, die ich aufrufen muss, oder eine Logik, die ich implementieren muss, um die Spalte zu entfernen?

    
Mark 09.05.2011, 14:39
quelle

4 Antworten

6

Versuchen Sie für Ihren Tisch, table.setAutoCreateColumnsFromModel(false); aufzurufen.

Dieser Beitrag enthält ein gutes Beispiel dafür, wie Sie die Spalte und das zugrunde liegende Element löschen können Daten.

    
Bala R 09.05.2011, 14:45
quelle
4

Auf der Ebene TableColumn zu agieren, hat, wie Sie sehen, nur eine visuelle Auswirkung, aber keine Auswirkung auf die TableModel überhaupt.

Wenn Sie wirklich eine Spalte aus DefaultTableModel entfernen wollen, müssen Sie sie ableiten und dann in Ihrer Unterklasse:

%Vor%

Ich habe es nicht überprüft, aber es sollte in Ihrem Fall funktionieren.

Natürlich sollte removeColumn() nur vom EDT aufgerufen werden.

Beachten Sie, dass ich niemanden ermutigen würde, diese Art von Code zu produzieren; Insbesondere die Verwendung oder Ableitung von DefaultTableModel ist nicht die beste Lösung, um TableModel zu definieren.

    
jfpoilpret 09.05.2011 16:10
quelle
3
  

Ich gehe hier davon aus, dass die Spalte zum Modell hinzugefügt wurde, von wo sie entfernt werden muss?

Ja.

  

Gibt es eine bestimmte Methode, die ich aufrufen muss, oder eine Logik, die ich implementieren muss, um die Spalte zu entfernen?

Nein, aber Sie können Ihre eigene Methode zusammenstellen:

%Vor%

Als eine Randnotiz, wenn Sie den Benutzern die Möglichkeit geben möchten, Spalten ein- und auszublenden, sehen Sie sich den Tabellenspaltenmanager .

    
camickr 09.05.2011 18:33
quelle
0

Das DefaultDataModel hat keine wirklich removeColumn () Funktion, also habe ich selbst eine Funktion geschrieben, die das Problem tatsächlich lösen kann.

%Vor%     
Kailang Jiang 06.04.2015 01:45
quelle

Tags und Links