JTable Daten aktualisieren mit neuem TableModel



  • Hallo zusammen,

    bin wieder ein wenig am Programmieren. Mein Projekt (ein kleines Auswertungsprogramm
    meines fuer den rest des Monats zur Verfuegung stehenden Budgets) ist soweit fertig.

    Nun bin ich am optimieren. Also unnoetige Zeilen entfernen (nein die Kommentare meine
    ich nicht) oder mehrere Codezeilen in wenigen zusammenfassen so weit es geht.

    Nun bin ich an der Stelle in der ich bisher in der Tabelle die Daten, auf Grund eines neuen
    wertes in einem JTextField, erneuere. Dies geschieht momentan immer mit dem
    neu setzten des TableModels fuer die Tabelle. Nun habe ich mir mal gedanken ueber die
    Speichernutzung des Rechners gemacht. Den fuer ein neues Modell und dessen Daten wird
    ja wieder zusaetzlich Platz benoetigt, wenn das Array das die Daten zur Anzeige beinhaltet
    sehr gross sein sollte. Aber was ist mit dem Object im Speicher welches das
    vorherige Modell darstellt. Wird der irgendwann wieder freigegeben? (eventuell durch den
    GarbageCollector)

    Nun habe ich nach einer Moeglichkeit gesucht an statt der Tabelle ein neues Modell zuzuweisen,
    lieber die Daten im Array des alten Modelles zu aendern/neuschreiben und danach die
    Tabelle sich selbst aktualisieren zu lassen.

    Dafuer habe ich in meinem Tabellen Modell (welches "extends AbstractTableModel" ist) eine
    public void Methode eingefuegt, welcher ein neuer Wert uebergeben wird, anhand dessen
    die Daten des Arrays aktualisiert werden.

    public void aktualisieren(String strDatum) {
    		daten = lese_werte(strDatum, iOption);
    		fireTableDataChanged();
    }
    

    Leider kann ich auf diese Methode nicht zugreifen. In der Class in der die Tabelle erzeugt wird
    und sich dessen Instanz befindent (Name table 🙂 ) komme ich an die Methode mit

    table.<name meiner Methode>
    

    nicht herran

    auch ein

    table.getModel().<name meiner Mehtode>
    

    funktioniert nicht.



  • Ja, der Speicher des vorherigen Modells wird freigegeben, es ist also kein Speicherungetüm das du erzeugt hast sondern ein Performanceungetüm.

    Dein bestimmtes Modell erhältst du durch casten:

    MyTableModel model = (MyTableModel)table.getModel();
    model.aktualisieren(textBox.getText());
    

    MfG SideWinder



  • Hat super geklappt, danke! 🙂

    Dann kann ich das ja gleich mal ein paar andere Projekte entsprechend
    umstrukturieren. 😃


Anmelden zum Antworten