JTable sortieren und synchronisieren von zwei Datenvektoren

Status
Nicht offen für weitere Antworten.

echnaton12

Mitglied
Hallo Leute,

habe mal eine Frage vielleicht wisst Ihr ja einen Rat?

Habe mir eine sortierbares Tablemodel implementiert funktioniert auch alles wunderbar Code anbei:
Code:
public class DistrictTableModel extends AbstractTableModel implements
    SortableTableModelInterface
{
  private Vector data;
  private Object[] headerData;
  private Comparator comperator;
  private ColorChooser chooser;
  private Vector stats;

  public DistrictTableModel(Object[] colHeads, Vector data,
                            Comparator comperator, ColorChooser chooser)
  {
    super();
    this.comperator = comperator;
    this.data = data;
    this.headerData = colHeads;
    this.chooser = chooser;
    this.stats = new Vector(this.data.size());
    for (int i = 0; i < data.size(); i++) {
      if (data.get(i) instanceof District) {
        District dis = (District) data.get(i);
        chooser.getColorChoice(dis.getColor()).setEnable(false);
        Iterator iter = dis.getLocations().values().iterator();
        double hundProz = dis.getLocations().size();
        double ok = 0;
        double psoOk = 0;
        while (iter.hasNext()) {
          Location loc = (Location) iter.next();
          Color col = loc.getColor();
          if (col.equals(Color.green)) {
            ok = ok + 1;
          }
          else {
            if (col.equals(Color.orange)) {
              psoOk = psoOk + 0.5;
            }
            else
            if (col.equals(Color.blue)) {
              hundProz = hundProz - 1;
            }
          }
        }
        if (hundProz == 0) {
          this.stats.add(i, new Integer(100));
        }
        else {
          Integer erg = new Integer( (int) ( ( (ok + psoOk) / hundProz) * 100));
          this.stats.add(i, erg);
        }
      }
    }
  }

  /**
   * Returns the number of columns in the model.
   *
   * @return the number of columns in the model
   * @todo Diese javax.swing.table.TableModel-Methode implementieren
   */
  public int getColumnCount()
  {
    return this.headerData.length;
  }

  /**
   * Returns the number of rows in the model.
   *
   * @return the number of rows in the model
   * @todo Diese javax.swing.table.TableModel-Methode implementieren
   */
  public int getRowCount()
  {
    return this.data.size();
  }

  /**
   * Returns the value for the cell at <code>columnIndex</code> and
   * <code>rowIndex</code>.
   *
   * @param rowIndex the row whose value is to be queried
   * @param columnIndex the column whose value is to be queried
   * @return the value Object at the specified cell
   * @todo Diese javax.swing.table.TableModel-Methode implementieren
   */
  public Object getValueAt(int rowIndex, int columnIndex)
  {
    switch (columnIndex) {
      case 0:
        return ( (District)this.data.get(rowIndex)).getName();
      case 1:
        return new Integer( ( (District)this.data.get(rowIndex)).
                           getAcousticsLogger().size());
      case 2:
        return ( (Integer)this.stats.get(rowIndex)).toString() + " %";
      case 3:
        if ( ( (District)this.data.get(rowIndex)).getPosition() == null) {
          return "N";
        }
        else {
          return "Y";
        }
      default:
        return "";
    }
  }

  public Object getObjectAt(int rowIndex)
  {
    return this.data.get(rowIndex);
  }

  public Object removeObjectAt(int rowIndex)
  {
    Object obj = this.data.remove(rowIndex);
    if (obj instanceof District) {
      District dis = (District) obj;
      chooser.getColorChoice(dis.getColor()).setEnable(true);
      return dis;
    }
    else {
      return null;
    }
  }

  public boolean removeObject(Object obj)
  {
    if (obj instanceof District) {
      District dis = (District) obj;
      if (this.data.remove(obj)) {
        chooser.getColorChoice(dis.getColor()).setEnable(true);
        return true;
      }
      else {
        return false;
      }
    }
    else {
      return false;
    }
  }

  public void addObject(Object obj)
  {
    if (obj instanceof District) {
      District dis = (District) obj;
      chooser.getColorChoice(dis.getColor()).setEnable(false);
      this.data.add(dis);
    }
  }

  public void sort(int Column)
  {
    if (this.comperator != null) {
      if (this.comperator instanceof DistrictTableComperator) {
        ( (DistrictTableComperator)this.comperator).setColumn(Column);
          Collections.sort(this.data, this.comperator);
      }
    }
  }

  /**
   * Returns the name of the column at <code>columnIndex</code>.
   *
   * @param columnIndex the index of the column
   * @return the name of the column
   * @todo Diese javax.swing.table.TableModel-Methode implementieren
   */
  public String getColumnName(int columnIndex)
  {
    if (columnIndex < this.headerData.length) {
      return this.headerData[columnIndex].toString();
    }
    else {
      return super.getColumnName(columnIndex);
    }
  }

  /**
   * Returns true if the cell at <code>rowIndex</code> and
   * <code>columnIndex</code> is editable.
   *
   * @param rowIndex the row whose value to be queried
   * @param columnIndex the column whose value to be queried
   * @return true if the cell is editable
   * @todo Diese javax.swing.table.TableModel-Methode implementieren
   */
  public boolean isCellEditable(int rowIndex, int columnIndex)
  {
    return false;
  }

  /**
   * Sets the value in the cell at <code>columnIndex</code> and
   * <code>rowIndex</code> to <code>aValue</code>.
   *
   * @param aValue the new value
   * @param rowIndex the row whose value is to be changed
   * @param columnIndex the column whose value is to be changed
   * @todo Diese javax.swing.table.TableModel-Methode implementieren
   */
  public void setValueAt(Object aValue, int rowIndex, int columnIndex)
  {
  }
}
Wie mann sieht benutze ich zwei Vektoren einen Für die Daten und einen für den Status der Objekte.
Die Einzelnen Spalten lassen sich auch wunderbar sortieren jedoch wenn ich die Spalte mit dem Status sortieren lasse stimmt die Zeilenzuordnung nicht mehr, da ja Daten und Status in verschiedenen Vektoren sind. Giebt es irgend eine Möglichkeit die beiden Vekoren zu synchronisieren also wenn ich den data Vektor sortiere das die Reihenfolge der Elemente im status Vektor angepasst werden und anders herum?
 
B

Beni

Gast
Hm, ich würde mir einen int-array machen, der die Indices übersetzt (und die Vektoren selbst garnicht sortieren).

Das würde dann in etwa so aussehen:
Code:
public class Model implements TableModel{
  private Integer[] indices; // Die Übersetzung
  private Vector a, b; // Die Daten
 
  public Object getValueAt( int row, int column ){
    // Mit Hilfe der Übersetzung das Element einer bestimmten
    // Zeile bestimmen
    if( column == 0 )
      return a.get( indices[ row ].intValue() );
    else
      return b.get( indices[ row ].intValue() );
  }

  public void sortA(){
    // Spalte A sortieren

    // Unsortierte Übersetzung. Jeder Eintrag entspricht
    // einem Element aus dem Vector "a"
    indices = new Integer[ a.size() ];
    for( int i = 0; i < indices.length; i++ )
      indices[i] = Integer.valueOf( i );

    // Sortierung herstellen
    Arrays.sort( indices, new Comparator(){
      public int compare( Object x, Object y ){
        int ix = ((Integer)x).intValue();
        int iy = ((Integer)y).intValue();

        Object ax = a.get( ix );
        Object ay = a.get( iy );

        // ax und ay irgendwie vergleichen
        return **ax < ay**;
      }
    });
  }
}


P.S. In Java 1.6 kann das JTable sortiert werden, wenn du also auf diese Version umsteigen willst... ersbarst du dir viel Arbeit :wink:
 

echnaton12

Mitglied
Beni hat gesagt.:
Hm, ich würde mir einen int-array machen, der die Indices übersetzt (und die Vektoren selbst garnicht sortieren).

Das würde dann in etwa so aussehen:
Code:
public class Model implements TableModel{
  private Integer[] indices; // Die Übersetzung
  private Vector a, b; // Die Daten
 
  public Object getValueAt( int row, int column ){
    // Mit Hilfe der Übersetzung das Element einer bestimmten
    // Zeile bestimmen
    if( column == 0 )
      return a.get( indices[ row ].intValue() );
    else
      return b.get( indices[ row ].intValue() );
  }

  public void sortA(){
    // Spalte A sortieren

    // Unsortierte Übersetzung. Jeder Eintrag entspricht
    // einem Element aus dem Vector "a"
    indices = new Integer[ a.size() ];
    for( int i = 0; i < indices.length; i++ )
      indices[i] = Integer.valueOf( i );

    // Sortierung herstellen
    Arrays.sort( indices, new Comparator(){
      public int compare( Object x, Object y ){
        int ix = ((Integer)x).intValue();
        int iy = ((Integer)y).intValue();

        Object ax = a.get( ix );
        Object ay = a.get( iy );

        // ax und ay irgendwie vergleichen
        return **ax < ay**;
      }
    });
  }
}


P.S. In Java 1.6 kann das JTable sortiert werden, wenn du also auf diese Version umsteigen willst... ersbarst du dir viel Arbeit :wink:

Danke für deine hilfe ist eine gute Idee mit dem Intarray ist nur die Frage was geht schneller den Vector zu sortieren oder das int Array. Auf java 1.6 werde ich noch nicht umsteigen sollte alles etwas abwärtskompatibel sein. Abert danke für den Rat.
 
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
L JTable (DefaultTableModel) nach Spalte sortieren-TableSorter AWT, Swing, JavaFX & SWT 2
S JTable + Sortieren => Problem bei Darstellung AWT, Swing, JavaFX & SWT 13
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