JTable mit Daten aus der Datenbank neu zeichnen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • JTable mit Daten aus der Datenbank neu zeichnen

    Ich möchte nach einer Datenbankabfrage eine Tabelle neu darstellen. Einen Kunden kann ich löschen/hinzufügen, dann jedoch funktioniert das neu zeichnen nicht mehr.

    Die Tabelle befindet sich auf einem Panel:

    Quellcode

    1. panelTableKunden.add(tableKunden);
    2. this.add(labelTabelleKunden, "1,23,5,23");
    3. this.add(new JScrollPane(panelTableKunden), "1,25,5,45");


    Hat jemand eine bessere Idee als,

    Tabelle löschen:

    Quellcode

    1. panelTableKunden.removeAll();

    Und dann Tabelle mit neuen Daten neu zeichnen:


    Quellcode

    1. panelTableKunden.add(tableKunden);
    2. this.add(new JScrollPane(panelTableKunden), "1,25,5,45");
    3. panelTableKunden.revalidate();
  • möchte den Inhalt der Tabelle aktualisieren

    Benutze folgenden Code:

    Quellcode

    1. public void erstellenTabelleKunden() {
    2. try {
    3. // Treiber bekannt machen
    4. Class.forName("com.mysql.jdbc.Driver");
    5. }
    6. catch (ClassNotFoundException e) {
    7. e.printStackTrace();
    8. System.exit(1);
    9. }
    10. try {
    11. // Verbindung zur Datenbank herstellen
    12. con = DriverManager.getConnection("jdbc:mysql://localhost/dvdverleih",
    13. username, password);
    14. stmt = con.createStatement();
    15. tableKunden = new JTable();
    16. String[] tblHead = {"Kunden Nr.","Vorname","Nachname","Strasse",
    17. "Strassen Nr.","PLZ","Ort"};
    18. JTableHeader th = tableKunden.getTableHeader();
    19. ResultSet datenMenge;
    20. datenMenge = stmt.executeQuery("SELECT kunden_id,vorname,nachname," +
    21. "strasse,strassen_nr,plz,ort FROM kunden");
    22. DefaultTableModel aModel = (DefaultTableModel)tableKunden.getModel();
    23. aModel.setColumnIdentifiers(tblHead);
    24. ResultSetMetaData rsmd = datenMenge.getMetaData();
    25. int colNo = rsmd.getColumnCount();
    26. while(datenMenge.next()) {
    27. Object[] objects = new Object[colNo];
    28. for(int i=0 ; i<colNo ; i++) {
    29. objects[i] = datenMenge.getObject(i + 1);
    30. }
    31. aModel.addRow(objects);
    32. }
    33. tableKunden.setModel(aModel);
    34. tableKunden.setEnabled(false);
    35. // nach dem zweiten Durchgang Panel frisch aufsetzen
    36. if(kontrolleRepaint > 0) {
    37. panelTableKunden.add(tableKunden);
    38. this.add(new JScrollPane(panelTableKunden), "1,25,5,45");
    39. panelTableKunden.revalidate();
    40. }
    41. kontrolleRepaint++;
    42. System.out.println("kontrolleRepaint: " + kontrolleRepaint);
    43. }
    44. catch(SQLException e) {
    45. //Fehlermeldung angeben
    46. System.out.println("\n Fehler: Sql-Abfrage \n");
    47. e.printStackTrace();
    48. return;
    49. }
    50. }
    Alles anzeigen
  • Moin,

    also was Du absolut nicht machen brauchst, ist irgendwas zu repainten oder die Panels neu einzufügen.
    Das DefaultTableModel welches Du verwendest, beinhaltet fire-Methoden, die aufgerufen werden können, sobald die Tabelle verändert wird.

    Zum Beispiel:
    Du fügst eine neue Zeile hinzu, danach kommt die fire-Methode:

    Quellcode

    1. aModel.fireTableDataChanged();


    Das sollte ohne Probleme funktionieren.

    Gruß,
    Puni