Problem mit Tabellen

  • Ich bins nochmal!

    Ich hab ein Problem mit Tabellen: ich habe ein eigenes TableModel. Gibt es eine Funktion die überprüft ob Daten in der Tabelle geändert wurden? Ich habe nämlich 9000 DB-Datensätze und ich will nicht alle immer updaten, dass dauert zu lange!

    Paddys, hm.....

  • Du must zunaechst einen Listener erzeugen, der die Methode 'tableChanged' ueberschreibt, und ihn an das TableModel anhaengen. die Indices fuer die Zeile und Spalte befinden sich dann im uebergebenen Event.

    Hier eine vollstaendige Demo:

  • danke erst mal

    Eine Frage hab ich aber noch! Ich will jetzt erst aktualisieren wenn ich einen Button klicke! Ist das auch möglich?

    Das haut bei mir so nicht hin!

    Paddys, hm.....

  • Zitat von jimbeam


    Eine Frage hab ich aber noch! Ich will jetzt erst aktualisieren wenn ich einen Button klicke! Ist das auch möglich?


    Das Problem versteh ich jetzt nicht. DU bestimmst doch, wann du die werte updatest (tableChanged), oder wann du sie in die Datenbank schreibst (was du mit dem rowData Object machst).

    * Du must in tableChanged ja nichts in die Datenbank schreiben. Du kannst dir einfach merken was du geaendert hast und erst bei buttonevent darauf reagieren.

    * Du must in setValue nicht die Daten in deinem Model aendern. Du kannst das auch irgendwo zwischenspeichern und das spaeter machen, wenn du willst. Ich weiss jetzt nicht, wozu das gut sein sollte aber es geht.

    * Du kannst auch selber entscheiden, wann tableChanged ueberhaupt aufgerufen wird (fireTableCellUpdated(row, col); )

  • bei mir kommt er nicht dahin:

    Code
    table.getModel().addTableModelListener(new TableModelListener() {
                public void tableChanged(TableModelEvent event) {
                  //System.out.println("DEBUG: " + rowData.get(event.getFirstRow()).get(event.getColumn()));
                    System.out.println("TEST");
                }
            });

    Auch wenn ich in der Spalte etwas eingebe kommt er nicht hinein!

    Paddys, hm.....

  • Erst wenn du die Eingabe bestaetigst (ENTER taste oder auf eine andere Spalte klicken), wird das event gefeuert. Ansonsten muss es an einem Bug in deiner Javaversion liegen (1.5 hier) oder du hast an dem democode etwas entscheidendes geaendert, denn ich hab meinen Code natuerlich getestet bevor ich ihn gepostet habe.


  • Das ist mein TableModel

    Code
    TableModel tm = new CMSTableModel(u_vec);        
            cmstable.setModel(tm);     
            this.cms_scrollpane.setViewportView(cmstable);

    Und so wird die Tabelle angezeigT!

    Den Code vom Listener hab ich ja schon gepostet!
    Ein Bug in Java? Das wäre sehrsehr blöde!

    Paddys, hm.....

  • Also ich hab jetzt meine demo so umgestaltet, das sie dein TableModel verwendet und hab nach wie vor keinerlei probleme (Ich bekomme die ausgabe "TEST", wenn ich einen wert in spalte 3 aendere.)

    UPDATE: Wenn diese Demo genau so bei Dir nicht funktioniert, poste doch bitte mal die Ausgabe von "java -version" hier. Bei mir ist das

    Code
    $ java -version
    java version "1.5.0_06"
    Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-112)
    Java HotSpot(TM) Client VM (build 1.5.0_06-64, mixed mode, sharing)


    (auf Mac OSX)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!