# JComboBox anzeige



## The_S (27. Apr 2007)

Hi nochmal,

bevor ich mich jetzt durch alle möglichen Editoren/Modelle/Renderer der ComboBox wühle, frage ich einfach hier mal, weiß bestimmt jemand auswendig  .

Es geht darum, das angezeigte Item auf ein Fixes zu verändern. Die einzelne Items IN der ComboBox sollen natürlich weiterhin korrekt angezeigt werden, und ich möchte auch weiterhin (zumindest über einen ItemListener) bei der Selektion eines anderen Items erfahren können, um welches es sich hierbei handelt.

Danke!


----------



## tini (27. Apr 2007)

So, und jetzt noch mal ganz langsam erklären, so dass es die, die dir helfen sollen auch verstehen.

Was willst du machen? Wenn möglich anhand eines Beispiels beschreiben.

Ich versteh nämlich (auch nach mehrmaligem Lesen) überhaupt nicht, was du wo und wie anzeigen willst.


----------



## The_S (27. Apr 2007)

Hm, ok ich versuche mich nochmal  .

Also, normalerweiße hat man eine JComboBox mit mehreren Elementen (Items). Diese Elemente werden - bei druck auf den entsprchenden Drop-Down-Button der JComboBox - in Listenform in einem Drop-Down Menü aufgelistet. Daraus kann man sich dann für gewöhnlich ein Item auswählen. Bei klick auf dieses, wird das Drop-Down-Menü wieder geschlossen und das selektierte Item in das eigentliche Anzeige-Feld der JComboBox geschrieben. Soweit die gewöhnliche Verhaltensweiße einer JComboBox.

Wenn bis dahin alles klar ist, erläutere ich jetzt, wie ich meine JComboBox abändern möchte  . Bei meiner JComboBox möchte ich im Anzeige-Feld der JComboBox ein Objekt darstellen, das

1.) nicht zwingend unter den hinzugefügten Items der JComboBox ist
2.) auch bei Auswahl eines Elements im Drop-Down-Menü der JComboBox nicht durch das soeben selektierte ausgetauscht wird

. Es handelt sich also um eine reine GUI-Angelegenheit, da intern natürlich das wirklich ausgewählte Element gespeichert werden soll. Nur nach Außen soll ein anderes angezeigt werden.

Kurzum: In welcher Methode welcher Klasse wird die Darstellung des Anzeige-Feldes einer JComboBox geregelt?

So verständlicher?


----------



## tini (27. Apr 2007)

Hobbit_Im_Blutrausch hat gesagt.:
			
		

> So verständlicher?


Ich denke schon. Allerdings hab ich sowas noch nicht gemacht und weiß auf Anhieb (und auch nach ein bissl rumprobieren) nicht, wie man das anstellen könnte, vor allem, wenn das anzuzeigende Objekt nicht im Model ist.

Vielleicht kann ja jemand anderes mal was dazu sagen.


----------



## tini (27. Apr 2007)

Hier mal ne Lösung. Ist sicher nicht die feine englische Art (das Objekt im ItemListener immer wieder neu zu setzen), aber es funktioniert erst mal. Weiß auch nicht, ob es das ist, was du dir vorgestellt hast.


```
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JFrame;

public class Test extends JFrame {
  
  private String object = "Hallo";

  public Test() {
    super();
    init();
  }
  
  private void init() {
    
    final DefaultComboBoxModel model = new DefaultComboBoxModel();
    model.addElement("eintrag1");
    model.addElement("eintrag2");
    model.addElement("eintrag3");
    JComboBox box1 = new JComboBox(model);
    getContentPane().add(box1, BorderLayout.CENTER);
    box1.setPreferredSize(new Dimension(150,20));
    model.setSelectedItem(object);
    
    box1.addItemListener(new ItemListener() {

      public void itemStateChanged(ItemEvent e) {
        if(e.getStateChange() == ItemEvent.SELECTED && e.getItem() != object) {
          System.out.println(e.getItem());
          model.setSelectedItem(object);
        }
      }
    });
    
    pack();
    setVisible(true);
  }
}
```


----------



## The_S (27. Apr 2007)

Danke erstmal für deinen Hilfestellung. Gehen tuts irgendwie, ich hab nur keine Lust jetzt alle möglichen Editoren/Modelle/Renderer (wie oben beschrieben) durchzugucken.

Deine Methode funktioniert natürlich, das Problem ist nur, dass das eine Art Referenzprojekt werden soll, wo man auch den Source-Code einsehen kann. Deshalb sollte deshalb auf die "feine, englische Art" geachtet werden


----------



## The_S (27. Apr 2007)

Die Lösung ist manchmal so peinlich einfach ...


```
jcb = new JComboBox(elements) {
				public Object getSelectedItem() {
					return getName();
				}
			};
			jcb.addItemListener(new ItemListener() {

				public void itemStateChanged(ItemEvent arg0) {
					JComboBox box = (JComboBox)arg0.getSource();
					System.out.println(box.getItemAt(box.getSelectedIndex()));
				}
				
			});
```

Für schönere Lösungen bin ich natürlich weiterhin gerne offen!


----------

