# Item in JComboBox umbenennen



## Mr.Fiii (13. Jan 2012)

Hallo,

ich möchte mich kurz vorstellen, da ich neu hier bin.
Ich bin 20 Jahre alt und mache eine Ausbildung zum Anwendungsentwickler. Grade bin ich auf ein (wahrscheinlich) sehr triviales Problem gestoßen.

Ich habe eine JCombobox (cbChooseFilter), in die ich Elemente hinzufügen kann.
Unterhalb der ComboBox habe ich einen Button, wo sich beim klicken darauf ein JOptionPane.showInputDialog öffnen soll, in dem ich einen neuen Namen eingeben kann und bei Klick auf OK soll das Element in der ComboBox den neu eingegebenen Namen annehmen.
Allerdings komm ich grade nicht so ganz zurecht damit.
Ich will mir das markierte Element schnappen und davon den Namen ändern. Wenn kein Element markiert ist, also in der ComboBox nichts ausgewählt, soll nichts passieren, oder eine Meldung "Kein Element ausgewählt".
Das alles soll in den Action Listener rein.
So soll das JOptionPane aussehen: 







Bis jetzt sieht mein Code so aus (Ob das if in dem ActionListener sinn macht, weiß ich nicht): 


```
jButtonRenameFilter.addActionListener(new java.awt.event.ActionListener() 
		{

			@Override
			public void actionPerformed(ActionEvent e) 
			{
				cbChooseFilter.getSelectedItem();
				if(cbChooseFilter.getSelectedItem()!= null)
				{
					return;
				}
				
				
			} 		});
```


Ich hoffe, ich habe mich klar ausgedrückt und ihr versteht, was ich machen möchte und was das Problem ist.





Liebe Grüße


----------



## bygones (13. Jan 2012)

was sind denn die Objekte in deiner Combobox ?

einfache Strings oder eigene Objekte?

bei Strings wird dir nix anderes uebrig bleiben als die Box neu aufzubauen, eben mit dem neuen String anstatt dem gerade selektieren, da Strings immutable sind.

Bei eigenen Objekten kannst du entsprechenden den Namen setzen und deine Box neu stopfen


----------



## Mr.Fiii (13. Jan 2012)

Hi,

die ComboBox sieht so aus:


```
cbChooseFilter.addItem("");
		cbChooseFilter.addItem(newFilterItemName);
		cbChooseFilter.addItemListener(new ItemListener()
		{
			@Override
			public void itemStateChanged(ItemEvent e)
			{
				if(e.getStateChange() != ItemEvent.SELECTED)
				{
					return;
				}

				Object item = e.getItem();
				if(item != null)
				{
					String itemName = item.toString();
					if(itemName.equals(newFilterItemName))
					{
						String newFilterName = JOptionPane.showInputDialog(null, SingletonFactory.INSTANCE.getBundle().getString("EnterName_Text"), SingletonFactory.INSTANCE.getBundle().getString("NewName_Text"), JOptionPane.QUESTION_MESSAGE);
						if(newFilterName != null)
						{
							cbChooseFilter.insertItemAt(newFilterName, 1);
							cbChooseFilter.setSelectedIndex(1);
						}
					}
				}
			}
		});
```


----------



## Michael... (13. Jan 2012)

Arbeite z.B. mit einem DefaultComboBoxModel. Da es sich in Deinem Fall um simple Strings in der ComboBox handelt kannst Du diese nicht ändern. Du kannst Du die Items die geändert werden sollen aus dem Model entfernen removeElement/removeElementAt und den neuen String an der ursprünglichen Position einfügen.


----------



## Mr.Fiii (13. Jan 2012)

Hallo,

danke für die Antworten.

D.h. ich müsste erst einmal abfragen, ob überhaupt ein Element ausgewählt ist.
Danach schnappe ich mir das Element, merke es mir, schmeiß es aus der Liste und füge es an selber Stelle wieder ein?
Ich bin noch nicht sehr Fit in Java und bin über jede Hilfe dankbar.

MfG


----------



## L-ectron-X (13. Jan 2012)

Nein, du kannst das mit der setSelectedItem()-Methode erledigen.
Diese ersetzt den selektierten Eintrag im DefaultComboBoxModel mit dem übergebenen Objekt/Wert.
Es kann aber sein, je nach dem, was du vor hast, dass du weitere Methode von DefaultComboBoxModel aufrufen musst.


----------

