vector, tabellen und Datenbank



  • Hi alle zusammen,

    ich greife mit meinem Java programm auf eine Datenbank zu, hole mit die Daten mit dem Resultset und speichere diese dann in einen Vector:

    while(rset.next()){
    vecData.addElement(rset.getString("System"));
    }package Frontend;

    Wie kann ich jetzt den Inhakt des Vectors in einer Tabelle anzeigen lassen???
    Danke für jede Hilfe!!!

    Der gesamte Code sieht so aus:

    import java.awt.BorderLayout;
    import java.awt.Container;
    import java.awt.FlowLayout;
    import java.awt.GridBagLayout;
    import java.awt.GridLayout;
    import java.sql.ResultSet;
    import java.sql.SQLException;

    import java.util.Vector;

    import javax.swing.BoxLayout;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JTable;
    import javax.swing.SpringLayout;

    import Backend.Database;

    public class Gui extends JFrame{

    public JTable table;
    public JButton save;
    public JButton cancel;

    public Gui() throws ClassNotFoundException, SQLException{
    super("Folgesystemdatenbank");

    Container cp = getContentPane();
    cp.setLayout(new FlowLayout());
    cp.add(this.table = new JTable());
    cp.add(this.save = new JButton());
    cp.add(this.cancel = new JButton());

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    setBounds(0,0,800,600);
    save.setText("Speichern");
    cancel.setText("Abbrechen");

    }
    public static void main(String[] args)throws ClassNotFoundException, SQLException {
    new Gui().setVisible(true);

    }

    public Vector getTableContent() throws ClassNotFoundException, SQLException{
    Vector vecData = new Vector();

    ResultSet rset;
    Database db = new Database("xy",portxy,"yx","yx");
    db.connect();

    rset = db.getValues("Select * From Folgesysteme");
    while(rset.next()){
    vecData.addElement(rset.getString("System"));
    }

    db.disconnect();
    return vecData;
    }

    }

    ..
    ..

    wie kann den Inhalt dieses Vectors in einer Tabelle anzeigen lassen?

    der gesamte Code sieht wie folgt aus:



  • Da gibt’s verschiedene Möglichkeiten. Z. B. könnte man ein Exemplar von JTable erzeugen, indem man die Spalten- und Zeilenanzahl angibt. In diesem Fall wär’s für den Vektor eine Spalte und so viele Zeilen wie Vektorelemente. Mit Hilfe des Standardmodells der Tabelle könnte man dann Werte mit Hilfe der Methode setValueAt() eintragen.

    Wenn du aber schon mit Datenbanken arbeitest, könntest du auf diese Schritte verzichten und einen eleganteren Weg wählen.
    Die meisten Swing-Komponenten verwenden MVC. JTable bezieht seine Werte von Objekten all jener Klassen, welche die Schnittstelle TableModel implementieren. So könnte man beispielsweise eine eigene Modellklasse schreiben, die Werte aus einer Datenbankdatei lädt und diese mit Hilfe der TableModel-Schnittstelle der JTable zur Verfügung stellt.
    Zum Beispiel so:

    class MeinModell
    extends AbstractTableModel
    {
      Vector vecData = new Vector();
    
      public MeinModell()
      {
    
        /*hier Datenbankabfrageoperation ausführen anstatt Testeinträge*/
        vecData.add("erster Eintrag");
        vecData.add("zweiter Eintrag");
        vecData.add("dritter Eintrag");
      }
    
      public int getRowCount()
      {
        return vecData.size();
      }
    
      public int getColumnCount()
      {
        return 1;
      }
    
      public Object getValueAt(int row, int column)
      {
        return vecData.elementAt(row);
      }
    }
    
    JTable tabelle = new JTable(new MeinModell());
    

    Dieses Modell lässt sich einfach erweitern, wenn z. B. mehr als ein Vektor dargestellt werden soll.



  • Hi,

    ich hab das jetzt mal so umgesetzt und es funktioniert auch! Schonmal vielen Danke!
    Wie erweitere ich das ganze jetzt aber um weitere Spalten? Durch was wird z.b. getValueAt() aufgerufen usw...?



  • CeNoRiDeR schrieb:

    Hi,

    ich hab das jetzt mal so umgesetzt und es funktioniert auch! Schonmal vielen Danke!
    Wie erweitere ich das ganze jetzt aber um weitere Spalten? Durch was wird z.b. getValueAt() aufgerufen usw...?

    Die TableModel-Methoden, wie z. B. getValueAt(), werden von der JTable aufgerufen, und zwar genau dann, wenn JTable die entsprechenden Informationen braucht. Beispielsweise "fragt" die JTable das Modell irgendwann, welcher Wert an der Stelle 0, 1 einzutragen ist. Das Modell antwortet mit getValueAt(), so wie die Methode von dir definiert wurde. Ebenso erweiterst du die Anzahl der Spalten, indem du den Rückgabewert von getColumnCount() änderst.

    Weitere Daten einzufügen sollte kein Problem sein. Das DefaultTableModel verwendet beispielsweise einen Vector, der wiederum Vector-Objekte enthält, um die Tabelle zu füllen. Als Übung könntest du so etwas nachbauen.


Anmelden zum Antworten