# TextFeld in Verbindung zur ComboBox automatisch aktualisieren



## c-i-k-o (2. Jul 2012)

Hallo,

ich habe folgendes Problem, und zwar bin ich gerade dabei eine GUI zu entwickeln, womit ich eine Datenbank verwalten kann, z.b. Name einfügen/löschen. 
Jeder Name hat eine auto inkremetierte ID.
Die Namen kann ich durch eine Combobox anzeigen lassen... soweit in Ordnung.

Aber... Neben der ComboBox befindet sich ein TextField, hier soll die zum Namen gehörende ID aus der Datenbank ausgelesen und in das Textfield einfügt werden. Die ID soll sich automatisch ändern, wenn der Name geändert wird

z.B. 
ComboBox (name)                           TextField (ID)
Mustermann, Max                            12

Ich hatte mir sowas in der Richtung überlegt, 

```
.
.
.
JTextField txfeld = new JTextField(4);
.
.
.

String SQLabfr = "select id, vorname from ma where name = '"+name+"' and vorname = '"+vorname+"'";                   
Sql.execute(SQLabfr);
String qqq = SQLabfr.toString();
txfeld = new JTextField(qqq)
```

leider klappt es nicht


----------



## Gast2 (2. Jul 2012)

Ich würde in die Combobox direkt "Person" Objekte legen. Dann fügst du nen ItemListener hinzu und aktualisierst das Textfield sobald sich der Eintrag ändert. Über das selectedItem kommst du dann an das Person Objekt und kannst dir darüber die Id holen.


----------



## so0jvpwemm (2. Jul 2012)

c-i-k-o hat gesagt.:


> ```
> String SQLabfr = "select id, vorname from ma where name = '"+name+"' and vorname = '"+vorname+"'";
> Sql.execute(SQLabfr);
> String qqq = SQLabfr.toString();
> ...


Das ist ja auch Schmarrn SQLabfr ist bereits ein String und enthält die Select Abfrage. Was soll der im Textfeld? Abgesehen davon enthält der Code enthält keine ComboBox...

Ganz grob:
- ActionListener an ComboBox
- darin die selektierten Werte abfragen
- die passende ID von der Datenbank abfragen - alternativ kann man die Daten, wenn es nicht zu viele sind, im Programm halten
- die ID per setText(String) ins Textfeld übergeben - bitte nicht jedes Mal ein neues Textfeld erzeugen. Man schmeißt ja auch nicht bei jedem neuen Film den Fernseher weg.


----------



## vanny (2. Jul 2012)

Mach dir am besten ne Wrapperklasse "Person" , die Name Vorname und ID halten kann.
Davon dann ein Datenmodel für die Combobox und dein Textfeld. ... fertsch.

Gruß Vanny


----------



## wurzelsepp (2. Jul 2012)

Man schmeißt ja auch nicht bei jedem neuen Film den Fernseher weg. -> Gute Idee für die Content- und Elektroindutrie. Man kauft keine DVD, sondern ein Fernseher mit einem Film. Ist dann gaaaanz sicher


----------



## c-i-k-o (3. Jul 2012)

Vielen Dank an Alle für die super schnellen Antworten.



so0jvpwemm hat gesagt.:


> Das ist ja auch Schmarrn SQLabfr ist bereits ein String und enthält die Select Abfrage. Was soll der im Textfeld? Abgesehen davon enthält der Code enthält keine ComboBox...
> 
> Ganz grob:
> - ActionListener an ComboBox
> ...



ich denke ich habe mein Code zu kurz hier eingefügt, 

Hier mein richtiger Code (der ja noch  nicht richtig funktioniert)

```
JLabel lData1  = new JLabel("ID");
    JTextField txFeld = new JTextField(4);

String[] personen = .............  //holt Daten aus der Datenbank z.b.:  Mustermann, Max
final JComboBox combo = new JComboBox(personen);

        combo.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent evt)
                {
                    String combocontains= combo.getSelectedItem().toString();            //Inhalt aus der ComboBox auslesen
                    String [] splitter = combocontains.split("\\, ");                                 //Inhalt bei "," Splitten
                    String vorname = splitter[0];
                    String name = splitter[1]; 

                    String id = "select id from person where vorname = '"+vorname+"' and name ='"+name+"'";
                    sql.execute(id);                                   //Verbindung zur Klasse sql um die Abfrage durchzuführen
  
                    txFeld.setText(id);              

                }
            });
```

Ja... in dem Textfeld wird jetzt logischerweise String id = "select id from person where vorname = '"+vorname+"' and name ='"+name+"'"; ausgegeben....
wie kann ich denn jetzt nur die ID im txFeld anzeigen lassen.

Da ich noch sehr frisch mit Java unterwegs bin, weiss ich leider noch nicht so ganz wie ich das Problem von der Welt schaffen soll


----------



## so0jvpwemm (3. Jul 2012)

c-i-k-o hat gesagt.:


> Ja... in dem Textfeld wird jetzt logischerweise String id = "select id from person where vorname = '"+vorname+"' and name ='"+name+"'"; ausgegeben....
> wie kann ich denn jetzt nur die ID im txFeld anzeigen lassen.


Heißt das, das eigentliche Problem ist nicht das Textfeld zu aktualisieren, sondern die Datenbank abzufragen?

Sofern Du kein Framework verwendest, kann man das Mittels Connection, (Prepared)Stament, ResultSet realisieren.


----------



## c-i-k-o (3. Jul 2012)

Mir ist ein Denkfehler unterlaufen habe ich nach langen Versuchungen bemerkt 

ich hatte ja am Anfang 

```
String id = "select id from person where vorname = '"+vorname+"' and name ='"+name+"'";
                    sql.execute(id);                                   //Verbindung zur Klasse sql um die Abfrage durchzuführen
  
                    txFeld.setText(id);
```

und musste eigentlich


```
String id = "select id from person where vorname = '"+vorname+"' and name ='"+name+"'";
                    txFeld.setText(sql.execute(id));
```
codieren....

Weil im ersten fall ja einfach nur der String übernommen wird und nicht das was "executet" wurde,
aber natürlich muss in das TextFeld das Ergebnis der ausgeführten Abfrage rein... 

Trotzdem... nochmals Vielen Dank an Alle


----------

