tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
6
ZUGRIFFE
516
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    DerBuhl DerBuhl ist offline Grünschnabel
    Registriert seit
    Jul 2011
    Beiträge
    4
    Hallo,

    ich bin dabei meine ersten Programme zu schreiben in Java und stehe nun vor einem Problem, was ich durch googlen und suchen bisher noch nicht lösen konnte. Daher versuche ich hier mal mein Glück und würd mich freuen wenn mir jemand antworten würde.

    Folgendes Problem:
    ich habe eine Liste "anzahl_list" und möchte die Einträge in dieser Liste in einer Jtable ausgegeben haben. Dies funktioniert auch soweit, aber nur mit der Angabe der verschiedenen Positionen in der Liste. Da die Liste aus einer Datenbank gefüllt wird, gibt es bei jedem Durchlauf unterschiedlich viele Einträge. Ich bräuchte jetzt irgendeine Funktion oder ähnliches, mit der ich bei:

    String[][] rowData = {

    { anzahl_list.get(0), anzahl_list.get(1), anzahl_list.get(2), anzahl_list.get(3), anzahl_list.get(4) },
    { anzahl_list.get(5), anzahl_list.get(6), anzahl_list.get(7), anzahl_list.get(8), anzahl_list.get(9) }};

    nicht immer 0,1,2 ... und so weiter, nicht immer händisch eintragen muss, sondern die Einträge dynamisch ermittelt werden. Ich habe an sowas wie "anzahl_list.get(all)" gedacht. Das gibt es aber leider nicht . Eine Schleife um "...rowData..." kann ich leider auch nicht packen, da diese Variable dann nachher nicht mehr für die JTable genutzt werden kann.

    Unten der Code

    int anzahl = (nam_list.size());

    int a = 0;
    int count = 0;
    List<String> anzahl_list = new ArrayList<String>();

    while(a!=anzahl){
    if (count==4){
    String na = nam_list.get(a);
    String br = na + "\n";
    anzahl_list.add(br);
    a++;
    count = 0;
    }
    else {
    String na = nam_list.get(a);
    anzahl_list.add(na);
    a++;
    count++;
    }
    }

    {

    String[][] rowData = {

    { anzahl_list.get(0), anzahl_list.get(1), anzahl_list.get(2), anzahl_list.get(3), anzahl_list.get(4) },
    { anzahl_list.get(5), anzahl_list.get(6), anzahl_list.get(7), anzahl_list.get(8), anzahl_list.get(9) }};

    String[] columnNames = {
    "Name", "Beschreibung", "Schrank", "Tür", "Fach"
    };

    JFrame f = new JFrame();
    Geändert von DerBuhl (26.07.11 um 19:51 Uhr)
     

  2. #2
    Avatar von HonniCilest
    HonniCilest HonniCilest ist offline Mitglied Platin
    Registriert seit
    Jun 2009
    Ort
    Java Insel
    Beiträge
    501
    Hallo und herzlich willkommen bei Tutorials.de,

    Vorab ein paar kleine Anmerkungen, bitte setze Java-Code in die entsprechenden Code-Tags, Code zu quoten ist nicht schön, also einfach "Quote" durch "Java" ersetzen...

    Dann meinerseits ein paar allgemeine Fragen...
    Code java:
    1
    2
    3
    
    int a=0;
    while(a!=anzahl)
    a++;
    Wähle hierfür eine for-Schleife, dies sieht dann so aus:
    Code java:
    1
    
    for(int a=0; a!=anzahl; a++) { }
    Du sagst die Daten kommen aus der Datenbank, wieso gehst du den Umweg über irgendwelche Listen?
     
    Jeder Fehler, aus dem wir lernen, ist ein Erfolg...
    ...Aber mach' nicht den Fehler, nicht aus deinen Fehlern zu lernen.

  3. #3
    DerBuhl DerBuhl ist offline Grünschnabel
    Registriert seit
    Jul 2011
    Beiträge
    4
    Danke erstmal für die Antwort und den Hinweis mit dem Code. Ich hoffe dieses mal ist es richtig
    Also diese while Schliefe habe ich gemacht, damit ich die Einträge dynamisch in die Liste schreiben kann. Jetzt brächte ich nur noch eine Funktion die diese Listeneinträge dynamisch in eine Tabelle überträgt.

    Hier ist einmal der gesamte Code des Fensters:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    
    package zumtesten;
     
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.awt.event.ActionListener;
    import javax.swing.JTable;
     
    import java.io.IOError;
    import java.io.IOException;
    import java.sql.*;
     
    import java.util.List;
    import java.util.ArrayList;
     
    public class FindArtikle extends JFrame {
     
     
        private JButton button;                                                     // Instanzvariable für einen Button
        private JPanel panel;                                                       // Instanzvariable für einen Panel
        private JButton button1;
         private JButton button2;
         private JLabel oben;
         private JLabel unten;
         private JLabel abstand;
         private JLabel abstand2;
         private JLabel abstand3;
         private JLabel name;
         private JLabel abstand4;
         private JLabel abstand5;
         private JButton schrankpl;
         private JButton suchen;
         private JLabel abstand6;
         private JLabel abstand7;
         private JLabel Na;
         private JLabel Beschre;
         private JLabel Schr;
         private JLabel Tu;
         private JLabel Fa;
         private JTable table;
         private JLabel label;
     
         public FindArtikle()                                                         // Konstruktor
     
        {
     
     
     
             super("Fenster");                                                      // Aufruf des Konstruktors der Superklasse mit übergabe eines Strings
             setSize(300, 300);                                                     // Fenster auf Grösse 300x300
             setLocation (300,300);                                                 // Position auf 300x 300
             setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);                        // Beim schliessen des Fensters --> Programm beenden
             setLayout(new BorderLayout(6,6));                                      // Ein Layout für JFrame festlegen
     
             panel= new JPanel(new GridLayout(8,9));                                // Ein Panel erzeugen mit GridLayout
                                                                                      // Einen Button erzeugen
             button1 = new JButton("Menü");
             button2 = new JButton("Beenden");
             schrankpl = new JButton ("Schrankplan");
     
             final TextField nametf = new TextField("", 30);
     
             unten = new JLabel("Version 1.0");
             oben = new JLabel ("Lagerungssoftware");
             abstand = new JLabel ("<html><b><font size='5'>Artikel suchen</font></b></html>");
             abstand2 = new JLabel ("");
             abstand3 = new JLabel ("");
             abstand4 = new JLabel ("");
             abstand5 = new JLabel ("");
             abstand6 = new JLabel ("");
             abstand7 = new JLabel ("");
             name = new JLabel("Artikelname:");
             suchen = new JButton("Suchen");
     
             panel.add(abstand);
             panel.add(abstand6);
             panel.add(abstand7);
             panel.add(abstand3);
             panel.add(name);         
             panel.add(nametf);
             panel.add(abstand2);
             panel.add(suchen);
             panel.add(abstand4);
             panel.add(abstand5);// Button auf Panel packen
             panel.add(button1);
             panel.add(button2);
             panel.add(schrankpl);
     
             button2.addActionListener( new ActionListener() {
             public void actionPerformed( ActionEvent e ) {
             System.exit( 0 );
                }
                    } );
     
             button1.addActionListener( new ActionListener() {
                 public void actionPerformed (ActionEvent e){
                 AppWindow AppWindow4 = new AppWindow();
                 }
             });
     
             schrankpl.addActionListener( new ActionListener() {
                 public void actionPerformed (ActionEvent e) {
                 schrankplan schrank = new schrankplan();
                 }
             });
     
     
             suchen.addActionListener( new ActionListener() {
                 public void actionPerformed (ActionEvent e) {
                String Name = nametf.getText();
     
     
        Statement stmt; // Ist ein Statement für die Benutzung mit SQL
        ResultSet rs;   // RS ist daszu da, damit man Daten aus der Datenbank lesen kann
     
     
     
              try {
     
              Class.forName("com.mysql.jdbc.Driver"); // lädt den Treiber
     
              String url = "jdbc:mysql://localhost:3306/lagerung"; // Der Pfad der Datenbank
              Connection con = DriverManager.getConnection(url, "root", "Admin"); // Hier wir eine Verbindung deklariert
     
     
     
              stmt = con.createStatement();  // Ist ein Statement für die Benutzung mit SQL
     
              rs = stmt.executeQuery("Select * from Artikel where Name Like '%"+ Name +"%'");                   // hier wird mit Hilfe eines Statements eine Anfrage (Query) an die Datenbank gestellt und in eine Objektvaiable gespeichert
              List<String> nam_list = new ArrayList<String>();
             
              while(rs.next()){                                                     //Diese Schleife wird verwendet um mit rs.getString das feld Name aus der Datenbank zu lesen
                     String Nam = rs.getString("Name");
                     nam_list.add(Nam);
     
                     String Beschrei = rs.getString("Beschreibung");
                     nam_list.add(Beschrei);
     
                     double Schran = rs.getDouble("Schrank");
                     String Schra = String.valueOf(Schran);
                     nam_list.add(Schra);
     
                     String Tue = rs.getString("Tuer");
                     nam_list.add(Tue);
     
                     String Fac = rs.getString("Fach");
                     nam_list.add(Fac);
                                 }
     
     int anzahl = (nam_list.size());                                       // Hier wird die Anzahl der in nam_list gefundeen Einträge in einer Variable gespeichert
              
     int a = 0;                                                            // a wird für die while Schleife gebraucht, und mit anzahl vergleichen, damit die Schleife nur Anzahl mal läuft
     int count = 0;                                                        // Count wird bis 4 gezählt, damit nach 5 aufrufen einen Zeilenumbruch erfolgen kann
     
     List<String> anzahl_list = new ArrayList<String>();
     
     while(a!=anzahl){
                 if (count==4){
                 String na = nam_list.get(a);
                 String br = na + "\n";
                 anzahl_list.add(br);
                 a++;
                 count = 0;
                              }
     else {
                 String na = nam_list.get(a);
                 anzahl_list.add(na);
                 a++;
                 count++;            
          }
                    }
             
        {
                  
        String[][] rowData = {
            
        { anzahl_list.get(0), anzahl_list.get(1), anzahl_list.get(2), anzahl_list.get(3), anzahl_list.get(4) },
        {  anzahl_list.get(5), anzahl_list.get(6), anzahl_list.get(7), anzahl_list.get(8), anzahl_list.get(9) }};
     
        String[] columnNames =  {
          "Name", "Beschreibung", "Schrank", "Tür", "Fach"
        };
     
        JFrame f = new JFrame();
        f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
     
        JTable table = new JTable( rowData, columnNames );
        f.add( new JScrollPane( table ));
        
        f.pack();
        f.setVisible( true );
      }
     
       
              
             // javax.swing.JOptionPane.showMessageDialog(null, anzahl_list);         //Anzahl_list inklusive Umbrüche wird ausgegeben
     
              
            } catch (Exception t) {
                System.out.println(t.getMessage());
            }
     
     
     
     
                 }
             });
     
     
     
             getContentPane().add(BorderLayout.SOUTH, unten);
             getContentPane().add(BorderLayout.NORTH, oben);
     
     
             getContentPane().add(panel);                                           // Panel auf Frame packen
     
                                                                             // Komplettes Frame auf optimale Größe packen
     
     
             setVisible(true);                                                      // Mach das Fenster sichtbar
     
              }
     
    }
     

  4. #4
    Avatar von HonniCilest
    HonniCilest HonniCilest ist offline Mitglied Platin
    Registriert seit
    Jun 2009
    Ort
    Java Insel
    Beiträge
    501
    Ich verstehe immernoch nichtht, wieso du den Umweg über eine Liste gehst, die Zeilenumbrüche bringen dir dann nur noch mehr arbeit. Schau mal hier:
    Code java:
    1
    2
    3
    4
    5
    
    String[] columnNames =  {"Name", "Beschreibung", "Schrank", "Tür", "Fach"};
    DefaultTableModel tableModel = new DefaultTableModel(columnNames, 0);
    String[] rsRow = {name, beschreibung, schrank, tuer, fach}; //Variablennamen schreibt man in Java nicht groß
    tableModel.addRow(rwRow);
    JTable table = new JTable(tableModel);
    Geändert von HonniCilest (29.07.11 um 08:39 Uhr)
     
    Jeder Fehler, aus dem wir lernen, ist ein Erfolg...
    ...Aber mach' nicht den Fehler, nicht aus deinen Fehlern zu lernen.

  5. #5
    z-mon z-mon ist offline Mitglied Bronze
    Registriert seit
    Mar 2010
    Beiträge
    43
    Hallo DerBuhl,

    ich habe vor langer Zeit mal ein Tutorial über JTable und JList mit einer Anbindung über eine DB geschrieben. Vielleicht hilft dir der Artikel ja bei deinem Problem weiter.

    Datenaufbereitung über JTabbedPane, JList und JTable – Tutorial

    Gruß
    Simon
     
    www.itblogging.de - Informationen rund um die Informatik
    Themen: Java, RCP, RAP, Linux, Shell, Ajax, Eclipse, Netzwerk, Security, PHP

  6. #6
    DerBuhl DerBuhl ist offline Grünschnabel
    Registriert seit
    Jul 2011
    Beiträge
    4
    Danke euch beiden für die Antworten, ich denke ihr habt recht und ich muss mich erstmal grundsätzlich mit JTable und JList auseinader setzen. Dannach frag ich euch dann nochmal
     

  7. #7
    DerBuhl DerBuhl ist offline Grünschnabel
    Registriert seit
    Jul 2011
    Beiträge
    4
    Sorry das ich so spät wieder nachfrage aber ich war im Urlaub.
    So also ich bin leider immer noch nicht schlauer . Ich habe den Code jetzt mal gekürzt und den Umbruch etc. von meinen letzen Versuchen herausgeschmissen.
    Mein problem beginnt ca. in Zeile 140.
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    
    package zumtesten;
     
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.awt.event.ActionListener;
    import javax.swing.JTable;
     
    import java.io.IOError;
    import java.io.IOException;
    import java.sql.*;
     
    import java.util.List;
    import java.util.ArrayList;
     
    public class FindArtikle extends JFrame {
     
     
                                                          
        private JPanel panel;                                                       
        private JButton button1;
         private JButton button2;
         private JLabel oben;
         private JLabel unten;
         private JLabel abstand;
         private JLabel abstand2;
         private JLabel abstand3;
         private JLabel name;
         private JLabel abstand4;
         private JLabel abstand5;
         private JButton schrankpl;
         private JButton suchen;
         private JLabel abstand6;
         private JLabel abstand7;
          
         public FindArtikle()                                                         // Konstruktor
     
        {
     
     
     
             super("Fenster");                                                      // Aufruf des Konstruktors der Superklasse mit übergabe eines Strings
             setSize(300, 300);                                                     // Fenster auf Grösse 300x300
             setLocation (300,300);                                                 // Position auf 300x 300
             setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);                        // Beim schliessen des Fensters --> Programm beenden
             setLayout(new BorderLayout(6,6));                                      // Ein Layout für JFrame festlegen
     
             panel= new JPanel(new GridLayout(8,9));                                // Ein Panel erzeugen mit GridLayout
                                                                                      // Einen Button erzeugen
             button1 = new JButton("Menü");
             button2 = new JButton("Beenden");
             schrankpl = new JButton ("Schrankplan");
     
             final TextField nametf = new TextField("", 30);
     
             unten = new JLabel("Version 1.0");
             oben = new JLabel ("Lagerungssoftware");
             abstand = new JLabel ("<html><b><font size='5'>Artikel suchen</font></b></html>");
             abstand2 = new JLabel ("");
             abstand3 = new JLabel ("");
             abstand4 = new JLabel ("");
             abstand5 = new JLabel ("");
             abstand6 = new JLabel ("");
             abstand7 = new JLabel ("");
             name = new JLabel("Artikelname:");
             suchen = new JButton("Suchen");
     
             panel.add(abstand);
             panel.add(abstand6);
             panel.add(abstand7);
             panel.add(abstand3);
             panel.add(name);         
             panel.add(nametf);
             panel.add(abstand2);
             panel.add(suchen);
             panel.add(abstand4);
             panel.add(abstand5);// Button auf Panel packen
             panel.add(button1);
             panel.add(button2);
             panel.add(schrankpl);
     
             button2.addActionListener( new ActionListener() {
             public void actionPerformed( ActionEvent e ) {
             System.exit( 0 );
                }
                    } );
     
             button1.addActionListener( new ActionListener() {
                 public void actionPerformed (ActionEvent e){
                 AppWindow AppWindow4 = new AppWindow();
                 }
             });
     
             schrankpl.addActionListener( new ActionListener() {
                 public void actionPerformed (ActionEvent e) {
                 schrankplan schrank = new schrankplan();
                 }
             });
     
     
             suchen.addActionListener( new ActionListener() {
                 public void actionPerformed (ActionEvent e) {
                String Name = nametf.getText();
     
        Statement stmt; 
        ResultSet rs;   
     
              try {
     
              Class.forName("com.mysql.jdbc.Driver"); 
     
              String url = "jdbc:mysql://localhost:3306/lagerung"; 
              Connection con = DriverManager.getConnection(url, "root", "Admin"); 
     
     
     
              stmt = con.createStatement();  
     
              rs = stmt.executeQuery("Select * from Artikel where Name Like '%"+ Name +"%'");                   
              List<String> nam_list = new ArrayList<String>();
             
              while(rs.next()){                                                     
                     String Nam = rs.getString("Name");
                     nam_list.add(Nam);
     
                     String Beschrei = rs.getString("Beschreibung");
                     nam_list.add(Beschrei);
     
                     double Schran = rs.getDouble("Schrank");
                     String Schra = String.valueOf(Schran);
                     nam_list.add(Schra);
     
                     String Tue = rs.getString("Tuer");
                     nam_list.add(Tue);
     
                     String Fac = rs.getString("Fach");
                     nam_list.add(Fac);
                                 }
                                                            
        {
                  
        String[][] rowData = {
            
        { nam_list.get(0), nam_list.get(1), nam_list.get(2), nam_list.get(3), nam_list.get(4) },
        {  nam_list.get(5), nam_list.get(6), nam_list.get(7), nam_list.get(8), nam_list.get(9) }};
     
        String[] columnNames =  {
          "Name", "Beschreibung", "Schrank", "Tür", "Fach"
        };
     
        JFrame f = new JFrame();
        f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
     
        JTable table = new JTable( rowData, columnNames );
        f.add( new JScrollPane( table ));
        
        f.pack();
        f.setVisible( true );
      }
               
            } catch (Exception t) {
                System.out.println(t.getMessage());
            }
     
     
     
     
                 }
             });
     
     
     
             getContentPane().add(BorderLayout.SOUTH, unten);
             getContentPane().add(BorderLayout.NORTH, oben);
     
     
             getContentPane().add(panel);                                           
     
                                                                             
     
     
             setVisible(true);                                                      
     
              }
     
    }

    also ich habe das Problem, dass es in der Datenbank redundante Einträge gibt. Die Tabelle muss also mal mehr als 5, mal weniger als 5 Inhalte aufnehmen.
    Durch
    Code java:
    1
    
     nam_list.get()
    bekomme ich ja nur eine Zeile ausgegeben. Hat vielleicht jemand einen Lösungsansatz für mich? Ich fürchte ich bin auf dem völlig falschen Weg .
    Ich habe es auch schon versucht mit:
    Code java:
    1
    2
    3
    4
    
    for(int i = 0; i<anzahl;i++){
    String[][] rowData = {
    { nam_list.get(i)}};
    }
    das funktioniert aber leider auch nicht . Ich bin echt ratlos
    Geändert von DerBuhl (16.08.11 um 20:59 Uhr)
     

Ähnliche Themen

  1. Selektion von JTable-Einträgen nicht mehr möglich und JProgressbar-Frage
    Von Sacrent im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 0
    Letzter Beitrag: 20.05.10, 16:24
  2. Richtigen Inhalt in dynamischen MC anzeigen
    Von -Phantomas- im Forum Flash Plattform
    Antworten: 2
    Letzter Beitrag: 29.09.09, 14:33
  3. JTable zum Anzeigen von Bildern
    Von Guadrion im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 1
    Letzter Beitrag: 04.09.09, 17:04
  4. eine unbekannte anzahl von einträgen anzeigen!
    Von Niklas_ im Forum Relationale Datenbanksysteme
    Antworten: 7
    Letzter Beitrag: 23.12.04, 14:18
  5. ComboBoxDaten in JTable anzeigen
    Von Shizzl_chrizzl im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 1
    Letzter Beitrag: 27.10.04, 11:18

Stichworte