# ComboBox aktualisieren



## Guest (19. Jul 2008)

Hi ich habe auch mal nen Problem mit dieser dämlichen ComboBox!!!

Ich habe zwei ComboBoxen! Wenn ich in einer etwas auswähle soll sich die andere dem entsprechend ändern!
er ändert auch die Items in der zweiten ComboBox aber er zeigt es mir nicht an!
Wie kann ich diese ComboBox refreshen???

hier mal der Code:

```
ArrayList<String> itemList = new ArrayList<String>();
		DefaultComboBoxModel model = null;
		if (cobGenre.getSelectedIndex() == 1) {
			itemList.clear();
			itemList.add("XVID");
			itemList.add("DVD 5");
			itemList.add("DVD 9");
			itemList.add("HDTV 720");
			itemList.add("HDTV 1080");
			itemList.add("HD2DVD");
			model = new DefaultComboBoxModel(itemList.toArray());
			cobMedium = new JComboBox(model);
			System.out.println(cobMedium.getItemCount()); // hier gibt er mir die richtige anzahl aus
		}
```

das ist die zweite Box, wo erst noch mehr drin steht! das löscht er auch und schreibt diese sechs rein, aber man kann es nicht sehen!

bitte um hilfe

danke schonmal im voraus!

mfg
Freaky


----------



## SlaterB (19. Jul 2008)

du erstellst eine neue JComboBox, in der GUI ist aber die alte eingefügt,

nur weil du deiner Variablen einen neuen Wert zuweist wird nicht durch Zauberhand in der GUI was gewechselt,
behalte also lieber die alte JComboBox bei und setzte bei dieser das neue Model ein


----------



## Freaky (19. Jul 2008)

sorry mein fehler hatte ich noch als probe drin!
eigentlich steht da

```
model = new DefaultComboBoxModel(itemList.toArray());
			cobMedium.setModel(model);
```


----------



## SlaterB (19. Jul 2008)

dann poste als nächstes bitte ein vollständiges Programm mit main, JFrame, dieser JComboBox und einem Button um die Werte neu zu setzen
(oder jemand anders weiß es vorher so, will dir keine Arbeit aufzwingen, aber bevor ich es selber machen muss..  )


----------



## Freaky (19. Jul 2008)

ok wird aber etwas länger!


```
public GUI() throws IOException
	{
		super();
		initialize();
	}

	private void initialize() {
		this.setSize(new Dimension(800, 600));
		this.setResizable(false);
        this.setContentPane(getLayoutPanel());
        this.setTitle("Upload Konfigurator created by Freaky");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
		this.setLocation((d.width - this.getSize().width) / 2, (d.height - this.getSize().height) / 2);
		this.setVisible(true);		
	}

private JPanel getLayoutPanel() {
     layoutPanel.add(getCobGenre(), gridBagConstraints5);
     layoutPanel.add(getCobMedium(), gridBagConstraints20);
     
     return layoutPanel;
}

	private JComboBox getCobGenre() {
		if (cobGenre == null) {
			cobGenre = new JComboBox("Section,Movie,Serien,Music,Games,Adult,Apps,Other".split(","));
			cobGenre.setSelectedIndex(0);
			
			cobGenre.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {					
					if (cobGenre.getSelectedIndex() == 1) {
						getCobMedium(); // datensatz in andere Combobox soll geändert werden
						if (msDialog != null && selectedIndex != 2) {
							tmp = "";
							msDialog.setVisible(true);
						}
						else {
							msDialog = new MovieSerienDialog("Section: Movie");
							msDialog.setVisible(true);
						}
						selectedIndex = 1;
					}
					
					if (cobGenre.getSelectedIndex() == 2) {
						getCobMedium();
						if (msDialog != null && selectedIndex != 1) {
							tmp = "";
							msDialog.setVisible(true);
						}
						else {
							msDialog = new MovieSerienDialog("Section: Serien");
							msDialog.setVisible(true);
						}
						selectedIndex = 2;
					}
					if (cobGenre.getSelectedIndex() == 3) {
						getCobMedium();
						if (mDialog != null) {
							tmp = "";
							mDialog.setVisible(true);
						}
						else {
							mDialog = new MusicDialog();
							mDialog.setVisible(true);
						}
						selectedIndex = 3;
					}
					if (cobGenre.getSelectedIndex() == 4) {
						getCobMedium();
						if (gDialog != null) {
							tmp = "";
							gDialog.setVisible(true);
						}
						else {
							gDialog = new GameDialog();
							gDialog.setVisible(true);
						}
						selectedIndex = 4;
					}
					if (cobGenre.getSelectedIndex() == 5) {
						getCobMedium();
						if (adDialog != null) {
							tmp = "";
							adDialog.setVisible(true);
						}
						else {
							adDialog = new AdultDialog();
							adDialog.setVisible(true);
						}
						selectedIndex = 5;
					}
					if (cobGenre.getSelectedIndex() == 6) {
						getCobMedium();
						if (apDialog != null) {
							tmp = "";
							apDialog.setVisible(true);
						}
						else {
							apDialog = new AppsDialog();
							apDialog.setVisible(true);
						}
						selectedIndex = 6;
					}
					if (cobGenre.getSelectedIndex() == 7) {
						getCobMedium();
					    selectedIndex = 7;
					}
					genreStringfromArrayList();
					getLblGenre();
				}
			});
		}
		return cobGenre;
	}

private JComboBox getCobMedium() {
		cobMedium = new JComboBox("Medium,XVID,DVD 5,DVD 9,HDTV 720,HDTV 1080,Serien,Audio,Games,PC,PS 2,PSP,Adult,AdultHD,Apps,Other".split(","));
		DefaultComboBoxModel model = null;
		if (cobGenre.getSelectedIndex() == 1) {
			String[] myItems = {"XVID","DVD 5","DVD 9","HDTV 720","HDTV 1080","HD2DVD"};
			model = new DefaultComboBoxModel(myItems);
			cobMedium.setModel(model);
			System.out.println(cobMedium.getItemCount());
		}
		if (cobGenre.getSelectedIndex() == 2) {
			String[] myItems = {"Serien","XVID","DVD 5","DVD 9","HDTV 720"};
			model = new DefaultComboBoxModel(myItems);
			cobMedium.setModel(model);
		}
		if (cobGenre.getSelectedIndex() == 3) {
			String[] myItems = {"Audio"};
			model = new DefaultComboBoxModel(myItems);
			cobMedium.setModel(model);
		}
		if (cobGenre.getSelectedIndex() == 4) {
			String[] myItems = {"Games","PC","PS 2","PSP"};
			model = new DefaultComboBoxModel(myItems);
			cobMedium.setModel(model);
		}
		if (cobGenre.getSelectedIndex() == 5) {
			String[] myItems = {"Adult","Adult HD"};
			model = new DefaultComboBoxModel(myItems);
			cobMedium.setModel(model);
		}
		if (cobGenre.getSelectedIndex() == 6) {
			String[] myItems = {"Apps"};
			model = new DefaultComboBoxModel(myItems);
			cobMedium.setModel(model);
		}
		if (cobGenre.getSelectedIndex() == 7) {
			String[] myItems = {"Other"};
			model = new DefaultComboBoxModel(myItems);
			cobMedium.setModel(model);
		}
		
		return cobMedium;
	}
```

so ist zwar nen bissel lang und nicht kommentiert! is aber leider so!


----------



## SlaterB (19. Jul 2008)

??

 wozu ist ein Kopf wenn nicht zum Denken?
du hast da eine Zeile wie
> this.setLocation((d.width - this.getSize().width) / 2, (d.height - this.getSize().height) / 2); 
die garantiert nix mit dem Problem zu tun hat,
du kopierst sie rüber, siehst sie, überlegst ob sie drin bleibt oder raus kann
und läßt sie drin?? oder überlegst gar nicht?
sich 2 Min. Zeit nehmen und aus 160 Zeilen Unfall werden 50 Zeilen gutes Testprogramm,
soviel Aufwand solltest du schon in deine Frage stecken

insbesondere die doppelte Unterscheidung nach Selekted-Index 1-7 muss komplett raus,

da dein Code weder eine Klasse noch eine main-Operation enthält, ist er leider in jedem Fall kein fertiges Testprogramm


----------



## SlaterB (19. Jul 2008)

aber nur Meckern ist ja auch nicht gesund, 
so gehts:

```
public class TestGUI extends JFrame {

	private JComboBox box = new JComboBox();

	public TestGUI() {

		JButton b = new JButton("Test");
		b.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				double d = Math.random();
				List l = new ArrayList();
				l.add("" + d);
				DefaultComboBoxModel m = new DefaultComboBoxModel(l.toArray());
				box.setModel(m);
			}
		});
		add(box, BorderLayout.NORTH);
		add(b, BorderLayout.CENTER);

		setSize(400, 300);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);

	}

	public static void main(String[] args) {
		new TestGUI();
	}
}
```


----------



## Freaky (19. Jul 2008)

sorry hab jetzt erst kappiert, das du nen komplettes test prgramm haben wolttest!! mach ich schnell fertig!!


----------



## SlaterB (19. Jul 2008)

siehe auch mein Posting zwischendurch,

dein setModel-Aufruf bringt wenig, wenn du am Anfang der Operation immer noch
> cobMedium = new JComboBox("Medium,XVI, ..
stehen hast, siehe erste Antwort


----------



## Freaky (19. Jul 2008)

dort wird sie aber erst erstellt! wie du in meinem langen post lesen kannst!

außerdem steht beimir sschon etwas drin, was ich ändern möchte!
außerdem möchte ich von einer combobox in eine andere etwas verändern!
ist zwar das gleiche, aber es funzt nicht!

er gibt mir ja mit 

```
System.out.println(cobMedium.getItemCount());
```

das richtige aus! aber ändert es halt nicht in der ansicht!


----------



## Freaky (19. Jul 2008)

kann ich das nicht enfach rauslöschen und etwas neues einfügen???


----------



## Freaky (19. Jul 2008)

und so erstelle ich am anfang meine comboBox

```
private JComboBox cobMedium = null;
```


----------



## Freaky (19. Jul 2008)

danke habe es jetzt so gemacht und es funzt!


```
DefaultComboBoxModel model = null;
		if (cobGenre.getSelectedIndex() == 0 && cobMedium == null) {
			cobMedium = new JComboBox();
			String[] myItems = {"Medium"};
			model = new DefaultComboBoxModel(myItems);
			cobMedium.setModel(model);
			System.out.println(cobMedium.getItemCount());
		}
```

also wenn es das erste Mal aufegrufen wird, dann erstellt er es und dann nicht mehr! habe auch ne null prüfung eingebaut!

danke nochmal!


----------



## SlaterB (19. Jul 2008)

ich kanns ja nochmal wiederholen, aber ich weiß nicht was dir das für neue Infos bringen soll:

wenn du die JComboBox in der GUI siehst, dann ist sie dort irgendwo schon eingefügt und vorher erzeugt,
dieses Objekt musst du verändern, dass heißt in aller erster Linie auf keinen Fall nochmal
> cobMedium = new JComboBox("Medium,XVID,DVD
auszuführen

jetzt kannst du noch lange diskutieren, es führt aber kein Weg dran vorbei

edit: na wenns geht, dann ist ja gut


----------

