AlexD979 Geschrieben 16. Juni 2003 Geschrieben 16. Juni 2003 Hallo ich habe eine JTable die mit (Deklaration ist public JTable tabelle;) tabelle = new JTable(rows, columnNames); erzeugt wird. Diese Tabelle enthält Daten die aus einem SQL-Result geholt werden und reihenweise angefügt werden. Nun ist die Tabelle gefüllt mit Datensätzen aus der Datenbank. Jetzt ändere ich Daten in meiner GUI, übergebe die an die Datenbank per SQL Insert und rufe die Methode datensatzEinlesen() wieder auf. Die Methode ist die selbe wie ich sie auch für den erstenmaligen Aufruf der JTable benutzt habe. Nun dachte ich, durch erneuten Aufruf dieser Methode liest er erneut die Datensätze aus der Datenbank ein und "überschreibt" einfach die JTable, die bereits angezeigt wird. Leider muss da ein denkfehler vorliegen, denn das klappt NICHT! Wo liegt mein Denkfehler oder wie kann ich es erreichen das nach der Datenbank-Aktion ein Update der Ansicht erfolt und die neuen Einträge in der Datenbank auch erscheinen. Ich habe den Quelltext mal angehängt, vielleicht kann mir jmd von euch in der Sache ein wenig weiterhelfen. public void datensatzEinlesen() { try { // SQL-Select-Befehl sql = "SELECT a.ID," + " c.PRODUKT," + " b.THEMENBEREICH," + " a.BESCHREIBUNG FROM IDEE a," + " themenbereich b," + " produkte c WHERE a.themenbereich=b.ID" + " and a.produkt=c.id ORDER BY a.ID"; stmt = con.createStatement(); result = stmt.executeQuery(sql); ResultSetMetaData metaData = result.getMetaData(); int numberOfColumns = metaData.getColumnCount(); Vector columnNames = new Vector(); columnNames.addElement("ID"); columnNames.addElement("Produkt"); columnNames.addElement("Themenbereich"); columnNames.addElement("Beschreibung"); //Alle Reihen einlesen Vector rows = new Vector(); while (result.next()) { Vector newRow = new Vector(); for (int i = 1; i <= metaData.getColumnCount(); i++) { newRow.addElement(result.getObject(i)); } rows.addElement(newRow); } result.close(); stmt.close(); tabelle_data = new JTable(rows, columnNames); tabelle_data.getTableHeader().setReorderingAllowed(false); tabelle_data.getTableHeader().setResizingAllowed(false); } catch (SQLException e) { JOptionPane.showMessageDialog( null, "Fehler beim Einlesen der Datensätze", "Hauptmenu - Ratioliste einlesen", JOptionPane.INFORMATION_MESSAGE); } JScrollPane jsp = new JScrollPane(tabelle_data); jsp.setBounds(5, 550, 650, 100); pan.add(jsp); } Zitieren
T. Schiffler Geschrieben 16. Juni 2003 Geschrieben 16. Juni 2003 Hi Du musst in der Methode in welcher Du das Model updatest einfach ein Event feuern dass sich die Daten geändert haben. Dieses Event lautet: fireTableDataChanged(); Gruß Erbeere Zitieren
AlexD979 Geschrieben 17. Juni 2003 Autor Geschrieben 17. Juni 2003 Hi Erdbeere... Ich glaube ich habe das etwas kompliziert erklärt Die JTable wird allein durch einen SQL gefüllt. Es werden ja keine Änderungen direkt in der Tabelle geschrieben sondern nur als "Hilfsmittel" zur Anzeige gebraucht. FireTableDataChanged ruft doch nur eine andere Methode auf, wenn ich eine Zelle in der Tabelle per Hand geändert habe oder? Das ist es ja nicht was ich brauche... Hast du vielleicht noch einen Alternativvorschlag? Zitieren
Jaraz Geschrieben 17. Juni 2003 Geschrieben 17. Juni 2003 Hi, http://fachinformatiker-world.de/forums/showthread.php?s=&threadid=42676&highlight=TableModel Gruß Jaraz Zitieren
AlexD979 Geschrieben 18. Juni 2003 Autor Geschrieben 18. Juni 2003 Hi! Danke für den Link, aber ich komme einfach so nicht weiter, vielleicht denke ich falsch. Ich habe das Beispiel schon so weit abgeändert, dass es eigentlich funktionieren sollte. Aebr leider tut es das nicht. Ich weiß nicht, wie ich meine Daten aus der SQL Abfrage in die Tabelle bekomme. Im Moment mache ich das über einen Vector, in dem Beispiel geschiet das ja statisch über ein Object. vielleicht kann mir jmd da einen konkreten Lösungsansatz geben das wäre super! ICh hänge mit meiner Arbeit momentan nur noch an dieser einzigen Sache! Zitieren
BlinderOpa Geschrieben 8. April 2008 Geschrieben 8. April 2008 mit fireTableDataChanged() wird der JTable bescheid gegeben, dass sich das Array (das im Hintergrund arbeitet) sich geändert hat... ob es jetzt manuell geändert wurde oder ob eine Methode dieses Array geändert hat ist eigentlich egal... du brauchst halt eine aktualisieren Knopf, der die Verbindung zur SQL Datenbank aufbaut und dein Hintergrundarray aktualisiert... und ein Speichern knopf, der die Änderungen der JTable dan in die SQL Datenbank schreibt... Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.