# ArrayList in JComboBox



## Pr1nzJohn (9. Nov 2016)

Moin! Ich habe folgendes Problem. Ich lese zwei Spalten aus einer SQLiteTabelle in ein ArrayList aus. Die Console zeigt mir die Daten auch richtig an.


```
//    schreibt oekurz und Fachlangbez in ListArray oeListe
        public ArrayList<String> Liste(){
            ArrayList <String> oeListe = new ArrayList <String>();
            try {
                oeListe.add(rs.getString(1)); //Spalte 1 OEKurz
                oeListe.add(rs.getString(2)); //Spalte 2 FachLangbez
             
//    KonsolenAusgabe
//               for(int i = 0; i < oeListe.size(); i++){
//                     
//                   System.out.println(oeListe.get(i) + " " + oeListe.get(i+1));
//                   i++;
//                }
            }
                catch (SQLException e) {
                    JOptionPane.showMessageDialog(null, "OEs konnten nicht abgerufen werden!/n" + e);
                }
                return oeListe;
        }
```

In einer weiteren Klasse möchte ich gern das Array in eine JComboBox stecken:

```
//   KomboBox bietet die OEs an zu denen der Angemeldet Benutzer berechtigt ist
        JComboBox<String> comboBox = new JComboBox<String>();
        OEAnzeige oe = new OEAnzeige(); // Referenz zur anderen Klasse
          
         try {
                for(int i = 0; i < oe.Liste().size(); i++){
                      comboBox.addItem(oe.OEKurz + oe.FachLangbez); //also so als Idee
                }
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
     
            comboBox.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                 
                }
            });
     
        comboBox.setBounds(329, 12, 203, 22);
        comboBox.setToolTipText("Bitte OE Ausw\u00E4hlen");
        comboBox.setFont(new Font("Microsoft JhengHei", Font.PLAIN, 11));

        menuePanel.add(comboBox);
```
Ich weiß grad nicht wo mein Denkfehler ist. Was könnte ich besser machen bzw. wie bekomm ich die Elemente in die Box. Wäre für hilfe sehr Dankbar!


----------



## JStein52 (9. Nov 2016)

Und was funktioniert nicht ?


Pr1nzJohn hat gesagt.:


> oe.OEKurz + oe.FachLangbez


was soll das denn sein ? Du hast eine Liste mit zwei Strings drinnen die musst du natürlich mit get(i) und get(i+1) wieder aus der Liste holen. Und mit der Variablen i in der Schleife aufpassen, die ist so falsch. Du musst i immer um 2 erhöhen, bei der Konsolenausgabe machst du es doch auch so, auch wenn es in Kommentar steht


----------



## Pr1nzJohn (9. Nov 2016)

Danke für die schnelle Antwort! Ich versuche mein Problem noch mal anders zu umschreiben. Ich habe das gerade noch mal was angepasst. Ich möchte gern aus einer Tabelle pro Zeile (mit 2Spalten) einen String der in einer kombobox angezeigt wird. Je nach angemeldetem Benutzer hat dieser unterschiedlich viele Einträge. Dies lese ich in ein array in dieser Klasse OEAnzeige ein.


```
//    schreibt oekurz und Fachlangbez in ListArray oeListe
        public ArrayList<OEAnzeige> Liste(){
            ArrayList <OEAnzeige> oeListe = new ArrayList <OEAnzeige>();
            try {
    
                OEAnzeige p = new OEAnzeige(
                        rs.getString("OEKurz"),
                        rs.getString("FachLangbez")
                        );
                        oeListe.add(p);

//  zur überprüfung für mich was steht im Array                  
//                for(int i = 0; i < oeListe.size(); i++){
//                    System.out.println(p.getOEKurz() + " " + p.getFachLangbez());
//                }
                  
               }
                catch (SQLException e) {
                    JOptionPane.showMessageDialog(null, "OEs konnten nicht abgerufen werden!/n" + e);
                }
                return oeListe;
        }
```

In einer weiteren Klasse kommt aber erst das verschieben in die JBox:

```
//         KomboBox bietet die OEs an zu denen der Angemeldet Benutzer berechtigt ist
      
        JComboBox<String> comboBox = new JComboBox<String>();
      
            OEAnzeige oe = new OEAnzeige(); //Referenz zur ArrayKlasse
      
            for(int i = 0; i < oe.Liste().size(); i++){
              
                comboBox.addItem(/*Zeile 1 Spalte 1+2 in einem String*/);     
            }
      
            comboBox.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                  
                }
            });
```
Mein Problem ist die comboBox.addItem()
Dort bekomme ich immer eine ich NullPointerException wenn ich versuche das Array wieder auszulesen. Wahrscheinlich ein Denkfehler  ... aber ich komm nicht drauf.
Hoffe man konnte es jetzt besser verstehen was ich meinte! Gruß Rene


----------



## JStein52 (9. Nov 2016)

Hast du es so probiert:


```
OEAnzeige oe = new OEAnzeige(); //Referenz zur ArrayKlasse
            ArrayList<OEAnzeige> myOE = oe.Liste(); // fuellt Liste und liefert diese zurueck
            for(int i = 0; i < myOE.size(); i++){
              
                comboBox.addItem(myOE.get(i).getOEKurz() + " " + myOE.get(i).getFachLangbez());
```
wobei man das doppelte get(i) sicher auch noch umgehen kann. Geht aber ums Prinzip.


----------



## JStein52 (10. Nov 2016)

Das "komische" an deinem Design ist dass man ein Object OEAnzeige anlegen muss um dann eine Liste von OEAnzeige-Objekten zu erzeugen.


----------

