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 😉


Anmelden zum Antworten