# DefaultComboBoxModel --> getSelectedItem() Problem



## poffi (17. Dez 2008)

Tag wohl!

Kann mir jemand sagen, warum mir getSelectedItem() immer das erste und nicht das effektiv markierte Element meiner JList ausgibt?

JList wird im Konstruktor initialisiert:


```
listPathsModel = new DefaultComboBoxModel();
listPaths = new JList();
getContentPane().add(
listPaths,
new AnchorConstraint(169, 660, 481, 30,
AnchorConstraint.ANCHOR_REL,
AnchorConstraint.ANCHOR_REL,
AnchorConstraint.ANCHOR_REL,
AnchorConstraint.ANCHOR_REL));
listPaths.setModel(listPathsModel);
listPaths.setPreferredSize(new java.awt.Dimension(301, 69));
```

Beim Klick auf einen Button im selben Fenster, wird dann der selektierte Eintrag ermittelt:


```
private void btnDeleteMouseReleased(MouseEvent evt) {
		System.out.println(listPathsModel.getSelectedItem());
	}
```

Danke im Voraus!


----------



## SlaterB (17. Dez 2008)

die Selektion einer JList wirkt sich meines Wissens nicht auf des SelektedItem eines ComboBoxModels aus,
du musst schon einen Listener an die JList anfügen und dann selber das Model updaten,

so habe ich es zumindest mal gemacht, könnte morgen Code posten falls Bedarf besteht, habe da ne eigene Klasse, die auch gleich auf SingleSelection einschränkt,
aber so ein Listener ist ja auch nicht schwer, schön wird das eh nicht


----------



## poffi (17. Dez 2008)

Bin noch nicht so der Desktop-GUI-Profi...aber hätte es mir ja selber denken können ...man muss wieder einmal alles selber machen !

Danke!


----------



## poffi (17. Dez 2008)

Vielleicht wäre der Code doch nicht schlecht...

Irgendwie seh ich noch nicht ganz durch. So füge ich den Listener hinzu:

```
listPaths.addListSelectionListener(new ListSelectionListener() {
					public void valueChanged(ListSelectionEvent evt) {
                        if(! evt.getValueIsAdjusting() )
                        {
                                System.out.println(evt.getFirstIndex());
                                System.out.println(evt.getLastIndex());
                        }
					}
				});
```
Jetzt gibt der mir aber nicht die korrekten Indizes zurück.

Wahrscheinlich hängt es damit zusammen, dass ich folgendermasen während der Laufzeit dem DefaultComboBoxModel-Werte hinzufüge:


```
listPathsModel.addElement(file);
```

Muss ich jetzt irgendwie die Liste "aktualisieren", damit sie wieder weiss wiviele Elemente das Model enthält?
Oder wo liegt mein Denkfehler?

Danke!


----------



## SlaterB (17. Dez 2008)

das Model muss bei Änderungen die JList aktualisieren, per Event,
wenn das aber nicht passiert, dann sollten nur zu wenige Elemente zu sehen sein, keine falschen Indexe,

poste evtl. genauer was du meinst, idealerweise mit einem Testprogramm


----------



## poffi (26. Dez 2008)

In zwischen hat sich mein Problem aus dem Staub gemacht...würde gerne sagen wo das Problem lag, aber ich weiss es selber nicht ! Ein bisschen herumgebastelt und API durchforscht und jetzt klappt es.

Aber natürlich stehe ich auch schon wieder vor einem anderen Problem, wo ich eine Lösung suche. Ich erstelle folgendermasen meine JList:


```
listPathsSP = new JScrollPane();
				getContentPane().add(listPathsSP, new AnchorConstraint(169, 655, 500, 26, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				{
					listPathsModel = new DefaultComboBoxModel();
					listPaths = new JList();
					listPathsSP.setViewportView(listPaths);
					listPaths.setModel(listPathsModel);
					listPaths.setPreferredSize(new java.awt.Dimension(301, 69));
				}
```

So füge ich dynamisch neue Elemente zur Liste (bzw. zum DefaultComboBoxModel):

```
listPathsModel.addElement(file);
```

Das klappt soweit auch wie es sollte. Leider erscheint kein ScrollPane, egal wie viele Elemente sich in der JList befinden. Nur wenn ich das Fenster klein skaliere erscheinen die Beiden Balken, aber auch dann lässt sich nicht zum untersten Eintrag scrollen. Wo liegt der Fehler oder noch besser die Lösung?


----------



## SlaterB (26. Dez 2008)

GUI-Fragen erfordern ein komplettes Beispielprogramm


----------



## poffi (26. Dez 2008)

ok...sorry! Hier eine aufs wesentliche abgespeckte Version: http://www.java-forum.org/de/userfiles/user4524/Example.java


----------



## SlaterB (26. Dez 2008)

von cloudgarden.layout.AnchorLayout habe ich noch nie gehört,
new AnchorConstraint(169, 655, 500, 26) klingt verdächtig nach absoluten Positionsangaben,

allerdings hätte ich im Moment eh keine Möglichkeit zum testen, müsste jemand anders beantworten


----------



## Gast (28. Dez 2008)

Dieser Zeile war überflüssig und verhinderte das die Scrollbalken erschienen:
listPaths.setPreferredSize(new java.awt.Dimension(301, 69));

Kommt davon wenn man mit irgendwelchen WYSIWYG-Editoren arbeitet


----------

