Jester Geschrieben 20. Februar 2002 Teilen Geschrieben 20. Februar 2002 Hallole, ich möchte den Inhalt einer Datenbank in einer Tabelle anzeigen lassen. Ich arbeite noch nicht lange mit dem JBuilder 5 und ich habe eine Komponente (jTable) gefunden, die für mich passen würde. Leider habe ich es noch nicht geschafft, die Daten an die Tabelle zu übergeben. Beim Initialisieren der Tabelle kann ich eine "Component" übergeben, und ich bin ratlos, was ist gemeint?? Wenn ich jTable erst beim Buttonklick anlegen will (vorher muss ich ja die Datenbank auslesen) klappt es mit der Initialisierung nicht mehr. :confused: :confused: :confused: :confused: Kann mir jemand ein Quelltext-Beispiel schicken, oder eine Adresse, bei der ich gute Tutorials zu dem Thema finde. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
T. Schiffler Geschrieben 20. Februar 2002 Teilen Geschrieben 20. Februar 2002 Hi Hier ist eine gute Seite welche Dir ein paar Beispiele zu Swing gibt: http://www2.gol.com/users/tame/swing/examples/SwingExamples.html Gruß Erbeere Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
mariejane Geschrieben 20. Februar 2002 Teilen Geschrieben 20. Februar 2002 ich hab das gleiche problem. ich arbeite mit ibm visual age for java. hab irgendwie keine ahnung wie ich überhaupt ansetzen soll. die beispiele helfen mit irgendwie nicht weiter. hat da jemand ahnung von, bzw. kann mir mal sagen wie ich es hinbekomme diese blöde tabelle zu füllen? erstellt ist sie schon automatisch, müssen nur noch daten rein. aber wie?? welche methode nehm ich? oder muß ich da noch mit was anderem arbeiten? irgendein bean? SOS!! ( Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
T. Schiffler Geschrieben 20. Februar 2002 Teilen Geschrieben 20. Februar 2002 Hi Also ich habe momentan nicht ganz so viel Zeit sonst würde ich mich dem Problem besser annehmen. Vor kurzer Zeit habe ich einmal ein Calendar-Panel programmiert, das verwendet ebenfalls einen JTable. Ich habe dies einmal auf meinen Server gelegt. Ladet es euch unter http://www.Twisterdesign.de/unterlagen/javacode/calendarpanel.zip runter, schaut es euch einmal an - besonders das Model - und versucht es zu verstehen. Sollte das noch nicht reichen, meldet euch nochmal bei mir und wir versuchen es anders. Erbeere Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Peeter Geschrieben 20. Februar 2002 Teilen Geschrieben 20. Februar 2002 Um eine Tabelle mit "Leben" zu füllen braucht ihr ein "AbstractTableModel". In der JDK-Doku steht dazu einiges. Aber hier noch mal ein Beispiel. class TbmTab1 extends AbstractTableModel { private Vector allePortsBezeichnungTable = new Vector(15,30); private Vector allePortsTable = new Vector(15,30); private final String[] columnNames={"Port","Port/Name"}; public void clear() { allePortsBezeichnungTable.clear(); allePortsTable.clear(); fireTableDataChanged(); } public void add(Integer port, String bezeichnung) { allePortsTable.add(port); allePortsBezeichnungTable.add(bezeichnung); int row = allePortsTable.size() - 1; fireTableRowsInserted(row, row); scpTab1.getViewport().setBackground(tblTab1.getBackground()); } public int getColumnCount() { return columnNames.length; } public int getRowCount() { return allePortsTable.size(); } public Object getValueAt(int rowIndex, int columnIndex) { switch(columnIndex){ case 0: return allePortsTable.get(rowIndex); case 1: return allePortsBezeichnungTable.get(rowIndex); default: return null; } } Das wäre jetzt eine Tabelle mit 2 Spalten mit den Bezeichnungen "Port" und "Portname". Wenn ihr Fragen dazu habt, fragt nochmal. cu Peeter Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jester Geschrieben 20. Februar 2002 Autor Teilen Geschrieben 20. Februar 2002 @Peeter public void add(Integer port, String bezeichnung) { allePortsTable.add(port); allePortsBezeichnungTable.add(bezeichnung); int row = allePortsTable.size() - 1; fireTableRowsInserted(row, row); scpTab1.getViewport().setBackground(tblTab1.getBackground()); } Ich habs eingebaut und in der void tauchen zwei Variablen auf, mit denen ich nichts anfangen kann: scpTab1 und tblTab1. Ich schaue erst morgen wieder rein merci erstmal P.S. wo übergebe ich das Ergebnis des ResultSet ? Ich habe es bei public void add übergeben. Ist das Richtig?? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jaraz Geschrieben 20. Februar 2002 Teilen Geschrieben 20. Februar 2002 Hallo, da ich das Problem auch schon mal hatte, hier der Code meiner Lösung. Funktioniert mit jeder beliebigen Tabelle in einer Datenbank. Gruß Jaraz PS: Wenn ihr Fragen zum Quelltext habt, fragt ruhig. Ich bin nämlich zu faul zum richtigen kommentieren im Code. --------------------------------------------- import java.awt.*; import java.sql.*; import javax.swing.*; import java.util.*; import java.awt.event.*; public class Main extends JFrame { public Main () { Vector rows = new Vector(); Vector colnames = new Vector(); JFrame frame = new JFrame(); JPanel contentPane = (JPanel)frame.getContentPane(); BorderLayout borderLayout1 = new BorderLayout(); enableEvents(AWTEvent.WINDOW_EVENT_MASK); contentPane.setLayout(borderLayout1); frame.setSize(new Dimension(400, 300)); frame.setTitle("DB Test"); try { Class.forName("com.sap.dbtech.jdbc.DriverSapDB"); String url = "jdbc:sapdb://host/database"; Connection connection = DriverManager.getConnection(url, "user", "pass"); Statement stmt = connection.createStatement(); ResultSet results = stmt.executeQuery("select * from test"); ResultSetMetaData rmeta = results.getMetaData(); for (int i = 1; i <= rmeta.getColumnCount(); ++i) { colnames.addElement(rmeta.getColumnLabel(i)); } while (results.next()) { Vector newRow = new Vector(); for (int j = 1; j <= rmeta.getColumnCount(); j++) { newRow.addElement(results.getObject(j)); } rows.addElement(newRow); } } catch (Exception ex) { ex.printStackTrace(); } JTable jTable1 = new JTable(rows, colnames); JScrollPane scrollPane = new JScrollPane(jTable1); contentPane.add(scrollPane, BorderLayout.CENTER); frame.setVisible(true); } protected void processWindowEvent (WindowEvent e) { super.processWindowEvent(e); if (e.getID() == WindowEvent.WINDOW_CLOSING) { System.exit(0); } } public static void main (String[] args) { new Main(); } } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Peeter Geschrieben 21. Februar 2002 Teilen Geschrieben 21. Februar 2002 @Jester tbmTab1 = new TbmTab1(); <-- Das ist die abstracte TableModel-Klasse tblTab1 = new JTable(tbmTab1); <-- und hier wird die Table "erstellt" tblTab1.setShowGrid(false); <-- hier wird das Gitternetz nicht angezeigt scpTab1 = new JScrollPane(tblTab1); <-- und hier wird sie dem JScrollPane hinzugefügt this.add(scpTab1, BorderLayout.CENTER); Da wird nichts anderes gemacht, als das eine JTable auf eine JScrollPane gelegt wird, die wiederum ins Layout eingefügt wird. Das müßtest du dort machen, wo deine Oberfläche gezeichnet wird. scpTab1(JScrollPane) und tblTab1(die eigentliche Tabelle) müßtest du global definieren. cu Peeter Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jester Geschrieben 21. Februar 2002 Autor Teilen Geschrieben 21. Februar 2002 @Peeter habe ich alles gemacht, es kommen keine Fehlermeldungen mehr, aber auch keine Tabelle. *seufz* Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Peeter Geschrieben 21. Februar 2002 Teilen Geschrieben 21. Februar 2002 Versuch´s mal mit "validate();" Wird einfach in die "public void add" - Methode geschrieben. Wenn´s dann noch nicht funzt, schreib noch mal. Ich überleg mir dann noch was. cu Peeter Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jester Geschrieben 21. Februar 2002 Autor Teilen Geschrieben 21. Februar 2002 @Peeter: vielen Dank für Deine Mühe Hi, mit validate() hab ich es auch versucht. Wie gesagt, es kommt keine Fehlermeldung und in der Datenbank ist sicher was drin (Access-Datenbank und Inhalt ist anzeigbar in TextArea). Irgendwo habe ich einen Knoten drin und ich find ihn nicht Ich werd erst mal ne Nacht drüber schlafen, vielleicht kommt mir morgen die Erleuchtung. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jester Geschrieben 21. Februar 2002 Autor Teilen Geschrieben 21. Februar 2002 @ Jaraz Deinen Vorschlag habe ich auch probiert, mit gleichem Ergebnis: Keine Fehlermeldung, keine Tabelle ciao Jester Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Peeter Geschrieben 21. Februar 2002 Teilen Geschrieben 21. Februar 2002 Probiert folgendes mal: Zieht das Panel/Frame in dem sich die Table befindet mal etwas größer/kleiner. Wenn dann der Inhalt erscheint, sage ich euch morgen mehr. Da muß die Table nämlich neu gezeichnet werden. Ich hatte auch eine ganze Zeit dieses Problem, hab es dann aber irgendwie hinbekommen. Wenn´s alles nix nützt, müßt ihr auf ´nem AbstractButton ne Action legen, die jedes mal die Table neu zeichnet wenn eine neue Zeile hinzugefügt wurde. Der Button muss nicht zu sehen sein. Aber probiert erst mal das mit dem größer ziehen des Frames und postet es dann, ob eure Table nen Inhalt hat. Ich schau heut Nacht noch mal nach!! cu Peeter Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jaraz Geschrieben 22. Februar 2002 Teilen Geschrieben 22. Februar 2002 Original geschrieben von Jester @ Jaraz Deinen Vorschlag habe ich auch probiert, mit gleichem Ergebnis: Keine Fehlermeldung, keine Tabelle ciao Jester Dann weiss ich nicht was du falsch machst. Alles was du ändern musst, ist in dem try-catch-Block. Wenn du Probleme mit der Datenbank hättest, würde er es auf der Console anzeigen. Das im Frame keine Fehlermeldung kommt, ist dir hoffentlich klar (man kann ja nie wissen mit welchem Wissensstand man es zu tun hat ) Also das Beispiel läuft bei mir mit Oracle, MSSQL, Mysql und SAP DB. Sowohl direkt im JBuilder als auch über die Dos Box von Windows. Mit welcher Datenbank arbeitest du denn? Was zeigt JBuilder beim ausführen im Messages Fenster? Gruß Jaraz Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jester Geschrieben 22. Februar 2002 Autor Teilen Geschrieben 22. Februar 2002 @ Peeter ein Teilerfolg: es wird eine Tabelle angezeigt !!! Ich habe noch eine Fehlermeldung: "TbmTab1.java": Fehler #: 300 : Methode fireTableRowInserted(int, int) nicht gefunden in Klasse datenbank_03.TbmTab1 in Zeile 36, Spalte 5 Ich habe ein neues Projekt angelegt, um die Tabelle zu testen. Im neuen Projekt ist bis jetzt nur die Tabelle drin, also noch kein Datenbankzugriff. Nun habe ich noch Fragen: 1. Wie kann ich das Erscheinen der Tabelle auf einen Buttonklick legen, da davor das Auslesen der Datenbank gemacht werden soll? 2. Wie und wo übergebe ich das ResultSet? 3. Wie wähle ich eine Zeile aus der Tabelle aus, z.B. um den Datensatz zu bearbeiten? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jester Geschrieben 22. Februar 2002 Autor Teilen Geschrieben 22. Februar 2002 @ Jaraz Ich arbeite mit einer Access-Datenbank. Bei Deinem Quelltext habe ich das Problem, dass ich nicht genau weiss, wo die Teile des Textes hinsollen. Wenn ich im JBuilder ein Projekt anlege und eine Anwendung, in der ich die grafische Oberfläche bestimme, muss ich teilweise den Quelltext der in public Main() steht in den Buttonklick schreiben. Dabei taucht dann wieder das Initialisierungsproblem der Tabelle auf, da mir der JBuilder dann rummault, weil er das gerne in der jbinit() hätte, dort kann ich es aber nicht hinschreiben, weil ich beim Programmstart noch nicht festlegen kann, welches Tabellenblatt geöffnet werden soll. Ich sagte ja, irgendwo habe ich einen Knoten drin. Ich hab jetzt bald Feierabend, zu Hause habe ich leider die Entwicklungsumgebung noch nicht, am Montag hab ich Schule, -> ich kann erst wieder am Dienstag weitermachen *nerv* Nächstes Wochenende nehme ich die Kiste mit !! Ich schaue weiterhin ins Forum, kann dann allerdings nicht gleich auf geniale Ideen reagieren. Schönes Wochenende !!! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Peeter Geschrieben 22. Februar 2002 Teilen Geschrieben 22. Februar 2002 Na also! Wenigstens etwas. Nimm anstatt fireTableRowInserted(int, int) mal fireTableChanged(null) bzw. fireTableDataChanged(null) Schick mir am besten mal den Teil der Source, der für die Tabelle verantwortlich ist. Da kann ich dir wahrscheinlich etwas mehr helfen. Allerdings bin ich in der nächsten Zeit fast nicht erreichbar!! Schulung bei SUN(*freu*) cu Peeter Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jester Geschrieben 27. Februar 2002 Autor Teilen Geschrieben 27. Februar 2002 So nun habe ich den Knoten entwirrt. Mein Prg zeigt mir auf Knopfdruck den Tabelleninhalt an. Erst dort wird die Tabelle initialisiert und danach mit validate() die Form neu geschrieben. So weit, so gut. Nun tauchen noch weitere Probleme auf: Wie mache ich die Tabelle dynamisch? Ich gebe im Quelltext die Spaltenzahl an. Wie kann ich auf unterschiedliche Spaltenzahlen reagieren. In der Datenbank befinden sich mehrere Tabellenblätter, zum Öffnen übergebe ich den Namen in einem String, den ich in den SQL-Befehl einbaue, das ist kein Thema. Nun sind die Tabellenblätter aber unterschiedlich aufgebaut. Kann ich die Spalten abfragen, oder schreibe ich für jedes Tabellenblatt eine eigene Klasse? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jaraz Geschrieben 28. Februar 2002 Teilen Geschrieben 28. Februar 2002 Hallo Jester, wenn du dir mein Beispiel mal genauer angeschaut hättest, müßtest du das nicht fragen. Du kannst die Anzahl der Spalten über: ResultSetMetaData rmeta = results.getMetaData(); rmeta.getColumnCount(); herausfinden. Den Namen der Spalte liefert dir: rmeta.getColumnLabel(i); Gruß Jaraz Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jester Geschrieben 28. Februar 2002 Autor Teilen Geschrieben 28. Februar 2002 @ Jaraz stimmt :) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
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.