JTable rücksetzen

Von: , Frage gestellt am Di, 27. Apr 2004

Hallo Leute!

Ich habe hier einen JTable mit zugehörigem TableModel, das auf einem
Vektor beruht. Ich möchte nun eine Funktion mit der der Table auf
seine ursprüngliche Werte zurückgesetzt wird (ala Änderungen
verwerfen). Dazu habe ich eine Funktion reset im TableModel
implementiert mittels der der Datenvektor auf die ursprüngliche
Version gesetzt wird. Das funktioniert auch soweit. Allerdings bleibt
die sichtbare Version des Tables unberührt und zeigt weiterhin die
editierte Version an, obwohl ich ein fireTableDataChanged eingefügt
habe. Ich habe auch versucht den JTable einfach nochmal neu mittels
table = new JTable (TableModel); zu erstellen. Aber das GUI zeigt mir
weiterhin keine Änderung.

Vielen Dank schonmal für Eure Hilfe!

Gruß

Edi

5 Antworten zu dieser Frage

  1. Antwort von nach 4 Stunden 0 hilfreich
    Re: JTable rücksetzen

    Hallo,

    Du solltest dazu ein Design-Pattern namens Memento benutzen. So speichert man Objekte in verschiedenen Versionen und holt sie wieder zurück.

    Vermutlich musst Du noch ein doLayout() oder so was ausführen.

    Schau mal nach, ob Du auch das richtige TableModell geändert hast.

    Notfalls einfach die gesamte JTable im Viewport ersetzen.

    Gruß

    Peter

    • Antwort von nach 4 Stunden 0 hilfreich
      Re^2: JTable rücksetzen

      Hallo,

      Du solltest dazu ein Design-Pattern namens Memento benutzen.
      So speichert man Objekte in verschiedenen Versionen und holt
      sie wieder zurück.
      Hallo Peter!

      Soweit ich das jetzt auf anderen Seiten nachlesen konnte habe ich
      sowas praktisch schon gemacht. Ich habe den DatenVektor, der dem
      TableModell zugrunde liegt praktisch in einer alten Version
      dupliziert. Nun soll dieser alte Vektor wieder eingesetzt werden.
      Dazu habe ich eine Methode in das TableModell eingefügt die so
      lautet:

      public void reset () {
      data = new Vector (initialData);
      System.out.println (data);
      }

      data ist der DatenVektor, initialData eine ältere Version des
      Vektors. Der Vektor wird auf jeden Fall richtig zurückgesetzt (dazu
      die print-Zeile).


      Vermutlich musst Du noch ein doLayout() oder so was ausführen.
      Wie genau müsste das dann aussehen. Ich hab es gerade nochmal mit
      folgender Version probiert:

      public void reset (){
      tableModel.reset ();
      answerTable = new JTable (tableModel);
      answerTable.doLayout();
      }

      Aber das Ergebnis bleibt gleich, am Table ändert sich nix. Schau mal nach, ob Du auch das richtige TableModell geändert
      hast.
      Hab ich auf jeden Fall (hab bisher nur eins geschrieben ;) ). Notfalls einfach die gesamte JTable im Viewport ersetzen.
      Wie das? Könntest du das noch etwas näher ausführen?

      Vielen Dank schon mal

      Edi

      • Antwort von nach 6 Stunden 1 hilfreich
        Re^3: JTable rücksetzen

        data = new Vector (initialData);
        System.out.println (data);
        Das scheint mir das Problem zu sein. Im Prinzip änderst du nicht das bestehende Model sondern machst ein neues.

        Du solltest dem bestehenden Model alle Zeilen entfernen und die neuen(alten) wieder neu addieren. Ein new... scheint mir hier fehl am Platz.

        Michael

        • Antwort von nach 20 Stunden 0 hilfreich
          Re^4: JTable rücksetzen

          Hi Michael!

          Stimmt da war das Problem gelegen. Es funzt jetzt.

          Vielen Dank nochmal

          Edi

      • Antwort von nach 17 Stunden 0 hilfreich
        Re^3: JTable rücksetzen

        Hallo Edi,

        ich habe das so programmiert, indem ich die Methode setModel(TableModel dataModel) aufgerufen habe. Dann hat alles sofort geklappt.

        Wenn Du die Methode Deiner JTable so etwa umschreibst müsste es klappen.

        public void reset() {
        this.setModel(storedData);
        }

        Gruß

        Peter

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!