Announcement

Collapse
No announcement yet.

JTable + MySQL + JPanel

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • JTable + MySQL + JPanel

    Hallo,
    ich bin im Moment dabei eine Datenbankanwendung zu schreiben. Diese Anwendung nutzt eine MySQL Datenbank zur Speicherung der Anwendungsdaten. Die Darstellung der Daten soll mittels einer JTable Komponente erfolgen. Dazu habe ich mir auch ein entsprechendes TableModel implementiert. Die View der Anwendung besteht aus einem JFrame, auf dem ich verschiedene JPanels platziere. Zunächst ein MainPanel ... auf diesem wiederum ein InputPanel (Dateneingabefelder), TablePanel (JScrollPanel mit JTable) und weitere.
    Mein Problem ist nun, dass ich zwar beim initialen Aufruf in der JTable Komponente alle Datensätze sehe, aber wenn über das InputPanel neue Daten eingegeben werden und ein entsprechender Event gefeuert wird, erscheinen diese neuen Daten erst nach einem erneuten Start der Anwendung. Ich denke die JTable Ansicht wird nicht aktualisiert... Ich habe schon in verschiedenen Manuals nachgelesen, aber da sind immer nur einfache Beispiele (Nur ein einziges JFrame mit einem Listener ... ). Ich bräuchte ein Beispiel für ein Scenario mit verschachtelten JPanels .... Schon mal Danke für Eure Hilfe!!!!!

    Viele Grüße,
    Knut

  • #2
    Hallo Knut,

    ich denke nicht, dass es mit Deinen verschachtelten Panels zu tun hat, sondern eher mit der Verwendung des MVC-Musters von Swing.

    Wie fügst Du die neuen Datenzeilen an? Wenn das Event ausgelöst wird, fügst Du die Zeilen in das TableModel oder direkt in die MySQL-Datenbank ein? Ein sauberer Weg wäre es, die Datenzeilen in das TableModel einzufügen, die Änderungen zu protokolieren und die Methode fireTableDataChanged von DefaultTableModel aufzurufen, damit die JTable das mitbekommt. Später würde ich eine "Sichern" Funktion aufrufen lassen, die dann die Änderungen im Client mit der Datenbank synchronisiert.

    Grüsse,
    Hendrik Brande

    Comment


    • #3
      Hallo Hendrik,
      danke für den Tip! Bisher hatte ich tatsächlich die Änderungen direkt in die Datenbank eingefügt und gehofft, dass das TableModel die Änderungen mitbekommt. Zwar hatte ich die fireTableDataChanged aufgerufen, aber anscheinend genügt dies nicht....
      Wie müßte eine die von Dir angesprochene Sichern-Funktion aussehen ... Wäre dies eine weitere Methode im TableModel, die sich mit der Datenbank connected und mittels einem INSERT Statement diese aktualisiert?

      Danke für Deinen Support!

      Viele Grüße,
      Knu

      Comment


      • #4
        Hallo Knut,

        ich würde das Sichern nicht direkt in dem TableModel realisieren, weil Du dann einen Bruch innerhalb Deiner Architektur hast. Das TableModel soll nur die Tabellendaten für die Verarbeitung verwalten. Das SIchern solltest Du in einer anderen Klasse realisieren - dem Controller - also einer Klasse, die steuert, was wann wo und wie passiert.

        Für das Sichern empfehle ich zunächst eine Methode dem TableModel zu geben, die alle ( geänderten ) Zeilen zurückliefert, bzw. eine Liste mit Daten, die zusätzlich für jeden Satz das Änderungskennzeichen ( Insert, Update, Delete ) beinhaltet.

        Innerhalb der Sichern-Methode holst Du Dir dann die Daten vom TableModel und danach baust Du dann die Verbindung zur Datenbank auf und verarbeitest die Daten anhand Ihres Änderungskennzeichens.

        Grüsse,
        Hendri

        Comment

        Working...
        X