Columns in einer JTable umsortieren.

  • Themenstarter Themenstarter kdohmann
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
K

kdohmann

Gast
Hallo.
Ich probiere gerade in einer JTable die Columns umzusortieren. Der Benutzer soll die Möglichkeit haben ganz normal die Columns in der Reihenfolge zu verschieben und in der größe zu ändern. Ich will mir das dann merken und bei einem späteren Programmstart wiederherstellen. Das merken wie sich das geändert hat ist auch garkein Problem. Aber ich krieg es nicht hin das später wieder zu setzen... Ich habe Probiert das über

Code:
mytable.getColumnModel().getColumn(i).setModelIndex(newIndex);
mytable.getColumnModel().getColumn(i).setWidth(newWidth);

zu machen. Der Inhalt wird auch wieder an die passende stelle verschoben. Aber der Header passt nicht. Und die Spaltenbreite ändert sich auch nicht..
Was mache ich da falsch??

Thx.

Kay
 
Nimm anstatt "setModelIndex" "moveColumn"; damit sollte die Spalte 'richtig' verschoben werden
 
Ich wollte mir aber nicht jede einzelne Verschiebung merken sondern nur das Endergebnis. Sonst kann das ja mit den Jahren ne lange Liste werden... =) Und das mit den Breiten klappt ja auch nicht..
 
Verstehe ich das Richtig: im Model sind die Spalten in der 'richtigen" Reihenfolge; in der View nicht (mehr) ??

Falls ja, so gehst Du von Spalte 0 bis Spalte n im Model durch guckst, wo sich die Spalte in der View befindet (convertColumnTo??? oder so) und schiebst sie an die 'richtige' Position.
 
Ich will das rekonstruieren was passiert, wenn ein Benutzer eine Spalte nimmt und an eine andere Position verschiebt oder die Größe von Spalten ändert.
 
Anonymous hat gesagt.:
Ich will das rekonstruieren was passiert, wenn ein Benutzer eine Spalte nimmt und an eine andere Position verschiebt oder die Größe von Spalten ändert.
Ich verstehe überhaupt nicht, was Du willst... was meinst Du mit "rekonstruieren" ?
 
Naja, wenn ein Benutzer das Fenster öffnet hat er ja die Möglichkeit die Spalten zu verschieben und dessen Größen zu verändern. Und wie die Table dann aussieht, dass speichere ich, wenn der Benutzer das Fenster schliesst. Wenn er jetzt das nächste mal das Fenster aufruft solls wieder genau so aussehen. Und am besten intern auch das gleiche sein. Ich will also nicht die Reihenforlge der Felder im SELECT (also im TableModel) ändern, da darf ich nix ändern. Ich will nur, dass die Spalten danach wieder genau so sind, wie sie's beim letzten Programmende waren.

Ich habe übrigends mit moveColumn(int,int) weiter was ausprobiert. Damit kann ich wirklich Spalten samt Header verschieben. Aber der ModelIndex in den Columns ändert sich nicht. Zumindest nicht direkt nach dem moveColumn(..)-Aufruf. D.h. ich kann nach einem moveColumn(...)-Aufruf nicht mit Sicherheit sagen, wo andere Spalten, die ich evtl. auch noch verschieben will hingerutscht sind; also weiß ich nicht, was ich dem nächsten moveColumn(..)-Aufruf als from-Parameter übergeben soll. So langsam wird das ganze recht frustrierend...

Aber: einen Erfolg hatte ich! Das setzen der Breite von einem TableColumn geht nicht wie ich dachte mit setWidth(), sondern mit setPreferredWidth(). =)
 
Du könntest dir eine Methode anlegen die dir den Spaltenindex zurückgibt aufgrund der Spaltenüberschrift:
Code:
   private int getCol(String col) {
        TableColumn column = null;
        for (int i = 0; i < tableLignes.getColumnModel().getColumnCount(); i++) {
            column = tableLignes.getColumnModel().getColumn(i);
            String hv = column.getHeaderValue().toString();
            if (hv.equalsIgnoreCase(col)){
                //                System.out.println("col: "+col+"  i: "+i);
                return(i);
            }
        }
        return(-1);
    }
Um eine bestimmte Spalte zu erreichen sagst du einfach:
Code:
getCol(UEBERSCHRIFT_XY)
wobei UEBERSCHRIFT_XY ein konstanter String ist der die Überschrift der gewünschten Spalte enthält.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben