JTable + Sortieren => Problem bei Darstellung

Status
Nicht offen für weitere Antworten.

Sancho

Aktives Mitglied
Hallo zusammen,

ich habe ein kleines Problem.

Ich benutze für meine JTable ein TableModel, befüllt wird es durch einen Vector.
Wenn ich aber jetzt nach irgendeinem Attribut den Inhalt sortiere passiert folgendes:
Die erste Zeile verändert sich, aber der Rest bleibt gleich. Erst wenn ich mit der Maus auf die anderen Zeilen klicke, verändern sie sich auch. Also ich muss irgendwie der Table bescheid sagen das sich der Inhalt verändert hat... nur wie ?
Habe schon alle Themen mit dem Betreff "Aktualisieren" durch, nur ging es dort immer um das hinzufügen oder löschen von Zeilen...das ist bei mir ja nicht der Fall...

Wäre super wenn mir jemand helfen könnte....

Gruß Sancho
 

Sancho

Aktives Mitglied
ja das habe ich mir schon angeschaut. Nur erbe ich nicht von DefaultTableModel oder AbstractTableModel, sondern nur von TableModel...und da kann man den Befehl ja irgendwie nicht ausführen....
Ich komme leider nicht drauf ;-(
 

semi

Top Contributor
Wenn Du "TableModel" implementiert hast, dann musstest Du zwangläufig die Methoden
addTableModelListener(TableModelListener l) und removeTableModelListener(TableModelListener l)
implementieren. Du musst die entsprechenden Events an die Listener schicken.

An Deiner Stelle würde ich AbstractTableModel erweitern, statt das Rad neu zu erfinden.
AbstractTableModel hat paar Hilfsmethoden, die sehr nützlich sind. Dazu zählt das ganze
Handling der Listener und Events.
 

Sancho

Aktives Mitglied
So, habe jetzt alles von AbstractTableModel erben lassen.
Jetzt rufe ich nach dem Sortieren aus einer anderen Klasse folgendes auf:
meineKlasse.meinTableModelObjekt.fireTableDataChanged();

nur bleibt es beim alten...erst bei einem Klick auf die Tabelle, verändern sich die Daten so wie sie sollen
 

Sancho

Aktives Mitglied
hier ist mal ein bisschen Code
sort ist ein JButton
Code:
sort.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent a) {
		
    SortMethods.sortWithCollection(0); //0 Steht für Sortieren nach Zahlen
				
        InputInspector.adminModel.fireTableDataChanded();//adminModel ist ein Objekt von AdminTableModel
			
	sortWindow.dispose();
			}
		});

Diese Funktion ist in einer anderen Klasse:

Code:
public static void sortWithCollection(int sortOrder) {
		Comparator comparator = null;
		
		switch (sortOrder){
		case 0: //Nummer
			comparator = new NummerComparator(); break;
		case 1: //name
			comparator = new NameComparator(); break;
		case 2: //vorname
			comparator = new VornameComparator(); break;
		case 3: //BAT-Stufe
			comparator = new BatComparator(); break;
		}
		
		if (comparator != null) {
			Collections.sort(getVectorToSort(), comparator);
			
		}
	}

Und dies ist mein TableModel:


Code:
public class AdminTableModel extends AbstractTableModel {
    
	
    public Vector adminList = new Vector();
	private Vector listeners = new Vector();

  
	/**
	 * added einen Admin wenn er per Hand eingegeben wird
	 * @param admin
	 */
    public void addAdmin(Administrator admin) {
       
    	adminList.add(admin);
    	int index = adminList.size();
        
//      Jetzt werden alle Listeners benachrichtigt 
        
       // Zuerst ein Event, "neue Row an der Stelle index" herstellen
        TableModelEvent e = new TableModelEvent(this, index, index,
            TableModelEvent.ALL_COLUMNS, TableModelEvent.INSERT);
    
//      Nun das Event verschicken 
        for( int i = 0, n = listeners.size(); i<n; i++ ){ 
            ((TableModelListener)listeners.get( i )).tableChanged( e ); 
         } 
    }
    
    
    public void addTableModelListener(TableModelListener l) {
        listeners.add(l);
    }
    
//  Eine Angabe, welchen Typ von Objekten in den Columns angezeigt werden soll 
    public Class getColumnClass(int columnIndex) {
                  
        switch (columnIndex) {
        case 0: return Integer.class;
        case 1: return String.class;
        case 2: return String.class;
        case 3: return String.class;
        default: return null;
          
            }
        }
    

    //number of columns
    public int getColumnCount () {
        
        return 4;
    }
  
    //returns the columnNames
    public String getColumnName(int columnIndex) {
        
            
        switch (columnIndex) {
        case 0: return "Nummer";
        case 1: return "Name";
        case 2: return "Vorname";
        case 3: return "Bat-Stufe";
        default: return null;
            
          }
      }
     
       
    //number of rows
    public int getRowCount () {
        
    	return adminList.size();
    	
    }
    
    //Der Wert der Zelle (rowIndex, columnIndex)
    //Für jeden Personentyp werden unterschiedliche Fälle betrachtet
    public Object getValueAt (int rowIndex, int columnIndex) {
        
            
        Administrator admin = (Administrator) adminList.get(rowIndex);
              
        switch (columnIndex) {
         case 0: return new Integer (admin.getPersNr());
         case 1: return admin.getName();
         case 2: return admin.getVorname();
         case 3: return admin.getBatStufe();
         default: return null;
             
        }
             
    }
    
    public boolean isCellEditable (int rowIndex, int columnIndex) {
        
        return false;
    }
    
    public void removeTableModelListener (TableModelListener l) {
        listeners.remove(l);
    }
    
    
    public void setValueAt (Object aValue, int rowIndex, int columnIndex) {
        
        Administrator admin = (Administrator) adminList.get(rowIndex);
        
        switch (columnIndex) {
        case 0: admin.setPersNr(((Integer)aValue).intValue()); break;
        case 1: admin.setName((String)aValue); break;
        case 2: admin.setVorname((String)aValue); break;
        case 3: admin.setBatStufe((String)aValue); break;
                
        }
        
    }
    
    
}
 

semi

Top Contributor
Code:
if (comparator != null) { 
  Collections.sort(getVectorToSort(), comparator); 
  fireTableDataChanged();  
}
und entferne die Methoden addTableModelListener und removeTableModelListener aus der Model-Klasse.
 

Sancho

Aktives Mitglied
mh wenn ich die entferne funktioniert das hinzufügen von Personen zur Tabelle nicht mehr...

da ich die Collections.sort-Methode in einer anderen Klasse habe, als das TableModel ist, habe ich die fireTableDataChanged über das aktuelle Objekt aufgerufen....bleibt aber alles beim alten ;-(
 

semi

Top Contributor
???:L :wink:
Also die Sortierfunktion würde ich schon im TableModel drin lassen.
Woher kommen die Daten her bzw. was tut "getVectorToSort()"?
Kann es sein, dass es eine andere Collection ist als die im TableModel?
 

Sancho

Aktives Mitglied
ja ok, dann werde ich mal die Methode mit ins Modell packen...
es ist nur so das ich drei Models habe, wo ich dann in jede diese sortMethode reinschreiben muss....ist ja ziemlich doppelt dann...
also getVectorToSort() kommt aus einer anderen Klasse...
er holt sich den aktuellen Vector aus dem AdminTableModel..

ich werde das alles viel zu kompliziert gemacht haben. Aber an der Uni lernt man sowas ja net richtig und soll dann trotzdem riesen Projekte machen ;-(
 

Sancho

Aktives Mitglied
habe das Problemchen gelöst.
Und zwar indem ich nach dem sortieren die Größe des JInternalFrames um 1 Pixel verändere und wieder zurück verändere. Dadurch zeichnet sich die Tabelle neu ;-)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Swing JTable sortieren AWT, Swing, JavaFX & SWT 2
W JTable erstellen und Spalten sortieren AWT, Swing, JavaFX & SWT 2
J Swing JTable - nach Sortieren andere Methode aufrufen AWT, Swing, JavaFX & SWT 2
K Probleme bei sortieren von jTable AWT, Swing, JavaFX & SWT 5
A JTable- sortieren lassen AWT, Swing, JavaFX & SWT 10
C Swing JTable sortieren AWT, Swing, JavaFX & SWT 3
G JTable sortieren AWT, Swing, JavaFX & SWT 2
N Listen in JTable sortieren AWT, Swing, JavaFX & SWT 3
E JTable nach mehreren Spalten sortieren AWT, Swing, JavaFX & SWT 14
E JTable sortieren AWT, Swing, JavaFX & SWT 3
B JTable: Zeilen sortieren, aber bestimmte Zeilen fest lassen AWT, Swing, JavaFX & SWT 9
S JTable sortieren AWT, Swing, JavaFX & SWT 17
T JTable - Einzelne Spalte nicht sortieren? AWT, Swing, JavaFX & SWT 2
G JTable sortieren mit eigenem Sortieralgorithmus AWT, Swing, JavaFX & SWT 3
M JTable sortieren AWT, Swing, JavaFX & SWT 7
B [JTable] kein Sortieren der versteckten Columns AWT, Swing, JavaFX & SWT 9
G JTable sortieren (Java 1.5) AWT, Swing, JavaFX & SWT 4
G JTable nach RowHeader-Werten sortieren AWT, Swing, JavaFX & SWT 2
F JTable Spalte sortieren mit lauter JComboboxen ? AWT, Swing, JavaFX & SWT 15
T JTable Sortieren AWT, Swing, JavaFX & SWT 2
E JTable sortieren und synchronisieren von zwei Datenvektoren AWT, Swing, JavaFX & SWT 2
L JTable (DefaultTableModel) nach Spalte sortieren-TableSorter AWT, Swing, JavaFX & SWT 2
G JTable sortieren durch click im Header AWT, Swing, JavaFX & SWT 9
C JTable sortieren nach Alphabet AWT, Swing, JavaFX & SWT 35
G Zellen in JTable alphabetisch sortieren AWT, Swing, JavaFX & SWT 13
P JTable nach mehreren Spalten sortieren AWT, Swing, JavaFX & SWT 15
G Inahlt von JTable sortieren AWT, Swing, JavaFX & SWT 2
A JTable sortieren AWT, Swing, JavaFX & SWT 4
J Drag und drop aus einer JTable - bitte um Unterstützung AWT, Swing, JavaFX & SWT 2
S HPRO und UPRO gemeinsame JTABLE gemeinsamer RENDERER ? AWT, Swing, JavaFX & SWT 1
F Swing JTable - MultiHeader inkl. Eingabemöglichkeit AWT, Swing, JavaFX & SWT 1
S JTable - Feldinhalte anzeigen AWT, Swing, JavaFX & SWT 15
D Swing JTable Spaltenbreite AWT, Swing, JavaFX & SWT 1
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
G jTable - getSelectedRow() AWT, Swing, JavaFX & SWT 3
I JTable mit einem Button zu einer Detail Seite springen AWT, Swing, JavaFX & SWT 4
P JTable Listener für die Änderung einzelner Zellen oder Rows AWT, Swing, JavaFX & SWT 2
D Tastaturabfragen CTRL+t, CTRL+E bei eine JTable, bestehend aus JTextAteas AWT, Swing, JavaFX & SWT 4
P Checkboxes in JTable nicht editable AWT, Swing, JavaFX & SWT 9
F Best-Practise: JTable Text in Zelle zu groß AWT, Swing, JavaFX & SWT 2
izoards JTable in CSV File schreiben... AWT, Swing, JavaFX & SWT 23
Kohl Jedes Objekt einer JTable um ein Zeichen verkürzen AWT, Swing, JavaFX & SWT 7
I JTable, DefaultTableModel, zwei Zahlen multiplizieren. AWT, Swing, JavaFX & SWT 26
M JTABLE / wie oft wurde gewürfelt. AWT, Swing, JavaFX & SWT 1
F JTable vergrößern AWT, Swing, JavaFX & SWT 2
H JTable: Diverse NullPointer-Exceptions zur Laufzeit AWT, Swing, JavaFX & SWT 3
J Swing Werte des JTable werden nicht angezeigt AWT, Swing, JavaFX & SWT 9
T Swing JTable cellRenderer mit jpg Hintergrundfarbe lässt sich nicht ändern. AWT, Swing, JavaFX & SWT 1
HoT Einzelne Zelle in JTable Rahmen unten setzen AWT, Swing, JavaFX & SWT 24
B JTable Zellen zusammenfügen AWT, Swing, JavaFX & SWT 3
M Swing Cell Renderer für Zeilenumbruch in JTable AWT, Swing, JavaFX & SWT 0
H JTable im JSplitPane darstellen AWT, Swing, JavaFX & SWT 2
MadMax2506 Swing JTable lädt sehr lange AWT, Swing, JavaFX & SWT 1
D Zeilenumbruch in einer JTable AWT, Swing, JavaFX & SWT 9
R Swing JTable und Spaltenausrichtung AWT, Swing, JavaFX & SWT 8
G JTable füllen AWT, Swing, JavaFX & SWT 1
H JTable TableCellEditor-Problem AWT, Swing, JavaFX & SWT 0
W Swing JTable Zeilenumbruch innerhalb einer Zelle AWT, Swing, JavaFX & SWT 3
J Datensatz in jTable ausgeben AWT, Swing, JavaFX & SWT 3
M Swing Automatischer Editorstart in JTable-Zelle AWT, Swing, JavaFX & SWT 5
ralfb1105 Swing JTable aktualisieren AWT, Swing, JavaFX & SWT 5
adiko01 JTable: Nur markierte Zeilen aus der Tabelle in CSV exportiern AWT, Swing, JavaFX & SWT 9
M JTable.setDefaultRenderer(...) greift nicht AWT, Swing, JavaFX & SWT 0
J JTable: Eingabe in Tabellenzelle korrigieren AWT, Swing, JavaFX & SWT 4
T Problem mit JTable Sortierung AWT, Swing, JavaFX & SWT 2
D JTable nach INSERT aktualisieren /refreshen AWT, Swing, JavaFX & SWT 1
D MySQL Daten in JTable anzeigen AWT, Swing, JavaFX & SWT 2
H Swing Jtable extra spalte AWT, Swing, JavaFX & SWT 6
S Swing Rechteck über JTable zeichnen (per MouseListener) AWT, Swing, JavaFX & SWT 1
S Swing Mal wieder JTable Ansicht aktualisieren AWT, Swing, JavaFX & SWT 10
A JTable mit Daten füllen AWT, Swing, JavaFX & SWT 1
VfL_Freak Swing Einzelne Zeile in jTable selektieren klappt nicht AWT, Swing, JavaFX & SWT 7
N AWT jTable CellRenderer AWT, Swing, JavaFX & SWT 6
T Swing JTable valueChanged datensatz löschen AWT, Swing, JavaFX & SWT 1
0 Swing JTable aus anderer Klasse updaten AWT, Swing, JavaFX & SWT 5
S Jtable defaultRenderer wohin damit ? AWT, Swing, JavaFX & SWT 23
T Swing JTable / FocusListener AWT, Swing, JavaFX & SWT 0
it_is_all Warum wird die JTable im JDialog nicht angezeigt? AWT, Swing, JavaFX & SWT 1
L Swing JTable im Panel darstellen AWT, Swing, JavaFX & SWT 8
T Swing Double Click bei Buttons in JTable AWT, Swing, JavaFX & SWT 9
J addRow bei JTable AWT, Swing, JavaFX & SWT 6
M Jtable gibt -1 wert bei selectedRow und Column AWT, Swing, JavaFX & SWT 3
Meeresgott Swing JTable AWT, Swing, JavaFX & SWT 4
J JTable Selection Listener funktioniert nicht AWT, Swing, JavaFX & SWT 4
C Swing Daten in JTable wiedergeben per TableModel und MVC Pattern AWT, Swing, JavaFX & SWT 16
Z Swing Drag&Drop zwischen JTable und JTree AWT, Swing, JavaFX & SWT 4
Thallius JTable dynamisch Spaltenanzahl verändern AWT, Swing, JavaFX & SWT 2
Thallius JTable dynamisch laden? AWT, Swing, JavaFX & SWT 2
T Swing JTable auslesen und befüllen AWT, Swing, JavaFX & SWT 8
B JTable wird nicht angezeigt AWT, Swing, JavaFX & SWT 1
J JTable und Suchlogik AWT, Swing, JavaFX & SWT 4
Viktim Swing JTable mit Tab verlassen AWT, Swing, JavaFX & SWT 1
F Swing Spaltenbreite einer Column eines JTable auslesen AWT, Swing, JavaFX & SWT 5
Viktim Swing JTable Mit Tab druch Zeilen Wechseln AWT, Swing, JavaFX & SWT 5
Thallius Warum refrehsed mein JTable nicht? AWT, Swing, JavaFX & SWT 5
Ghostman1711 Hinzufügen ausgewählter Dateinen des Filechoosers zu einem JTable AWT, Swing, JavaFX & SWT 9
S Swing JTable - Einzelne Rows einfärben AWT, Swing, JavaFX & SWT 11
M Wert einer Zelle aus JTable ziehen AWT, Swing, JavaFX & SWT 4
K JTable getValueAt() klappt nicht immer AWT, Swing, JavaFX & SWT 1
K JTable in extra Klasse, Zugriff in einer anderen klasse nicht möglich AWT, Swing, JavaFX & SWT 26

Ähnliche Java Themen

Neue Themen


Oben