JTable
-
Hallo Zusammen,
ich bin noch JAVA-Neuling und habe eine Frage. Ich möchte die Zeilen der Ergebnismenge einer Datenbankabfrage in eine JTable eintragen. Mir ist grundsätzlich und offensichtlich noch nicht klar, wie Daten von und zu der JTable und internen Datenstrukturen übertragen und jeweils bearbeitet werden. Jedenfalls habe ich folgenden Code geschrieben, der nicht funktioniert. Es wird immer nur die erste oder die letzte DB-Zeile in alle Zeilen der JTable eingetragen.
/* * Created on 04.06.2003 * * To change the template for this generated file go to * Window>Preferences>Java>Code Generation>Code and Comments */ package Konto; /** * @author Oliver * * To change the template for this generated type comment go to * Window>Preferences>Java>Code Generation>Code and Comments */ import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.table.*; import java.util.*; public class Kontenplan extends JDialog implements ActionListener { // Ein Panel definieren private JPanel centerPanel = new JPanel(); private JPanel southPanel = new JPanel(); // lokale Variablen String result = "\n"; int anzahl = 0; int i = 0; int zeilennummer = 0; int spaltennummer= 0; int a = 0; String zeile = new String(""); String value[] = new String[100]; String kommando = new String(""); // Label definieren // zugehörige Eingabefelder // CommandButton JButton buttonOkay = new JButton("Ok"); JButton buttonAbbrechen = new JButton("Abbrechen"); JButton buttonNeu = new JButton("Neu"); JButton buttonSpeichern = new JButton("Speichern"); // Tabelle definieren JTable tabelle = new JTable(new AbstractTableModel() { int reihen = 1000, spalten = 5; public int getRowCount() { return reihen; } public int getColumnCount() { return spalten; } public String getColumnName(int col) { String result = ""; switch(col) { case 0: result = "Kontoklasse" ; break; case 1: result = "Kontogruppe" ; break; case 2: result = "Kontonummer" ; break; case 3: result = "Kontoname" ; break; case 4: result = "Bezeichnung" ; break; default: } return result; } public void setValueAt(Object avalue,int reihen, int spalten) { int a = 1; // Testweise System.out.println("Hallo A = 1"); } public Object getValueAt(int reihen, int spalten) { switch(spalten) { case 0 : return value[0]; case 1 : return value[1]; case 2 : return value[2]; case 3 : return value[3]; case 4 : return value[4]; default: return null; } } } ); // Konstruktor Kontenplan() { Container cp = getContentPane(); cp.setLayout(new BorderLayout()); // Tabelle der Scrollpane zuweisen JScrollPane jsp = new JScrollPane(tabelle); // Layout für Panel setzen centerPanel.add(jsp); southPanel.setLayout( new FlowLayout(FlowLayout.RIGHT)); cp.add(centerPanel,"Center"); cp.add(southPanel,"South"); // Button verteilen southPanel.add(buttonNeu,"South"); southPanel.add(buttonSpeichern,"South"); southPanel.add(buttonAbbrechen,"South"); southPanel.add(buttonOkay,"South"); // Tabelle zum Center-Panel hinzufügen // ActionCommand buttonOkay.addActionListener(this); buttonNeu.addActionListener(this); buttonSpeichern.addActionListener(this); buttonAbbrechen.addActionListener(this); //Daten füllen, das ist eine eigene Klasse mit gekapselten DB-Funktionen db datenbank = new db(); datenbank.dbConnect("localhost","kontotest","root","xyz"); datenbank.dbLesen("Select * from konto order by kontoklasse, kontogruppe, kontonummer"); result = datenbank.dbGetFirst(); System.out.println(result); zeilennummer = 0; spaltennummer= 0; StringTokenizer part = new StringTokenizer(result,";"); while (result != null) { anzahl = part.countTokens(); i = 0; System.out.println("Spalten = " + anzahl); while(i < anzahl) { value[i] = part.nextToken(); spaltennummer = i; tabelle.setValueAt((Object) value[i],zeilennummer,spaltennummer); System.out.println((String) value[i]); i++; }; zeilennummer++; result = datenbank.dbGetNext(); System.out.println(result); if (result != null) part = new StringTokenizer(result,";"); } this.setTitle("Kontenplan erstellen"); this.setBounds(100,100,800,600); this.pack(); this.setModal(true); this.show(); } // Konstruktor public void actionPerformed(ActionEvent evt) { Object command = evt.getSource(); // Command enthält jetzt die Beschriftung des gewählten Menüeintrages // Action Commands für das File-Menu if (command == buttonOkay) { // Hier Aktionen für Ok-Button System.out.println("Button Okay gedrückt!!"); this.setVisible(false); } if (command == buttonAbbrechen) { // Hier Aktionen für Abbrechen-Button System.out.println("Button Abbrechen gedrückt!!"); this.setVisible(false); } if (command == buttonNeu) { } if (command == buttonSpeichern) { } } // actionPerformed } // Ende der Klasse Kontenplan erstellen
Kann mir Jemand helfen???
Gruss
Oliver
-
Mit setValueAt wirst du deines Lebens nicht Glücklich. In diesem Falle (eigentlich in jedem anderen auch) solltest du dich mit den Table-Models auseinandersetzen. Das ist nämlich die Datenmenge die von einer JTable dargestellt werden soll. Ist um Längen einfacher als das was du bisher schon gemacht hast.
Informationen zu JTables und ihrer Verwendung kannst du dem Java-Tutorial entnehmen.
-
Hallo Cengiz,
ok prima, danke! Es hat jetzt geklappt.
Gruss
Oliver