Aktualliesieren einer Tabelle Zurlaufzeit

mmadiesh

Grünschnabel
hallo
ich habe eine Tabelle aus einer Datenbank(Postgresql) erstellt und ich will sie zur Laufzeit ändern, wenn die Datenbank geändert wurde, indem ich auf einem Button klicke.
kann jemand mir helfen?
mit freundlichen Grüssen
 
Moin,
- benutze ein eigenes TableModel
- halte darin Deine Daten (Vector, List,..)
- bei Buttonklick fülle diese Daten neu
- danach führe ein fireTableDataChanged() aus

Das ist alles.
 
Hi!

Ich poste gleich mal hier, weil ich das selbe Problem habe :-(

Die Hashmap soll in der JTable ausgelesen werden.
Funktioniert auch beim Start, doch dann soll sie sich ändern wenn sich die Map verändert.

Die Map verändert sich auch, nur die JTable aktualisiert sich nicht


Code:
    public void setHashmap(HashMap map) {
        MyTableModell x = new MyTableModell();
         this.map = map;
        System.out.println(map);
        //System.out.println("HALLO");
        x.tableUpdate();
        //repaint();
}

class MyTableModell ................. {
     public void tableUpdate() {
        fireTableDataChanged();
     }
}

Aber es tut sich nichts :-(

Ist mein Ansatz falsch ?

Die Spalten bleiben immer gleich nur die Zeilen können sich ändern
Ich will die JTable komplett neu erstellen und nicht nur einzelne Zeilen

Mfg
Frankster
 
Moin,
würde ich vermuten, ja. Zumal Du in der setHashmap jedes mal ein neues TableModel erstellst:
MyTableModell x = new MyTableModell(); (Ob das später auch noch der JTable neu zugewiesen wird, ist aus dem Code nicht ersichtlich)
Das ist nicht sehr sinnvoll. Du musst lediglich die Daten im TableModel aktualisieren, auf die u.a. bei getValueAt() zugegriffen wird. TableModel oder JTable neu erstellen ohne Not ist eine eher suboptimale Lösung, vor allem in diesem Fall.
 
Ok, dann so

Im Konstruktor meiner Hauptklasse erstell ich eine Referenz auf das Objekt MyTableModel
Code:
public class Hauptklasse extends JFrame {
     public Hauptklasse() {
          MyTableModel x = new MyTableModel()
     }

     public void getHashmap(Hashmap map) {
          this.map = map;
          x.tableUpdate();
     }

     class MyTableModel extends AbstractTableModel {
          public void tableUpdate(){
                fireTableDataChanged();
          }
     }
}

geht aber auch nicht :-(

Dann hab ich mir gedacht vielleicht brauch ich "fireTableChanged(TableModelEvent e)" ?
Aber da versteh ich nur mehr Bahnhof :confused:
 
Moin,
also:
1. ist das Model nur innerhalb des Konstruktors vorhanden -> ändern als Instanzvariable
2. (Kosmetik) eine getter-Methode liefert etwas zurück. Ergo sollte die Methode nicht getHashmap heissen, sondern setHashmap wenn schon. ;)
 
Ich empfehle dir eine IDE wie zB. Eclipse, dann passieren dir solche Fehler wie mit der Instanzvariable nicht mehr so schnell.
 
OK

Code:
public class Hauptklasse extends JFrame {
MyTableModel x; 
    public Hauptklasse() {
          x = new MyTableModel()
     }

     public void setHashmap(Hashmap map) {
          this.map = map;
          x.tableUpdate();
     }

     class MyTableModel extends AbstractTableModel {
          public void tableUpdate(){
                fireTableDataChanged();
          }
     }
}

Geht aber noch immer nicht :)
 
Moin,
nun, dann musst Du schon etwas mehr Code liefern. Vorausgesetzt, Du verwendest den obigen Code richtig, funktioniert das auch. ;)
 

Neue Beiträge

Zurück