JComboBox

Endolino

Grünschnabel
Hallo Leute,

habe ein kleines Problem.

Ich initialisere bei einer Anwendung eine JComboBox fertig mit Werten. Diesen werden auch einwandfrei beim aufklappen angezeigt. Jetzt möchte ich jedoch nach einer gewissen Zeit , oder nach einer Aktion in der gleichen ComboBox neue Werte reinschreiben.

Problem systematisch dargestellt:

Ich habe eine Box mit 239 Ländernamen drin, nachdem in meinem Anwendung eine Person aus der DB ausgewählt wurde, möchte ich in dieser Box nur noch angeziegt bekommen in welchen Urlaubsländer dieser wirklich bereits war. D.h. ich muss die Werte abändern. Ein passendes StringArray habe ich mir bereits erzeugt, dass ich eventuell zur Neuerzeugung übergeben könnte. In diesem stehen nur noch die Länder drin, die ich in der Combobox brauche.

Vielleicht habt ihr ne Idee

Danke im Voraus!
 
Zuletzt bearbeitet:
Schade, da war MeinerEiner_80 mal wieder schneller. Dafür hab ich ein bisschen Code um das zu demonstrieren :)

Code:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;


public class Test {

	private JComboBox box = new JComboBox(new Object[] {"a","b","c"});
	
	public Test() {
		JFrame frame = new JFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setLayout(new BorderLayout());
		frame.add(box,BorderLayout.NORTH);
	
		JButton button = new JButton("click mich");
		button.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				box.removeAllItems();
				box.addItem("d");
				box.addItem("e");
				box.addItem("f");
			}
			
		});

		frame.add(button,BorderLayout.SOUTH);
		
		frame.pack();
		frame.setVisible(true);

	}
	
	public static void main (String [] args) {
		new Test();
	}
	
}
 
Vielen Dank für eure schnelle Hilfe!!
Leider komme ich dem Problem nicht näher.
Genau diese möchte ich ja ändern : jComboBoxCountry;

Dies kann jedoch nicht über einen ActionListener passieren. Ich frage auf nem Suchfeld nen Namen ab, dann startet eine Methode die mir vielerlei Sachen in meiner Anwendug macht. und am Schluss dieser aufgerufenen Methode muss ich die Werte ändern. Mit addItem und vorher RemoveAll() habe ich es schon probiert. Das klappt irgendwie nicht. Er schaltet mir die Box aus und meine Anwendung knallt. Das Problem ist meine Anwendung wird von 3 Entwicklern ausgearbeitet, ist ein Projekt für ne Studienarbeit. Habe euch mal die Klasse wo der jComboBoxCountry drin steckt mit reingepackt.

PHP:
public class JFilterPanel extends javax.swing.JPanel {
	
	private static final long serialVersionUID = 1L;
	
	public static JCheckBox jCheckBoxMale;
	public static JCheckBox jCheckBoxFemale;
	public static JCheckBox jCheckBoxUndefined;
	public static JComboBox jComboBoxPlaycount;
	public static JComboBox jComboBoxCountry;
	public static JComboBox jComboBoxAge;
	
	public static String countriesnames[] = new String[]{"all",
		"unknown", 
		"Afghanistan",
        "Albania",
        "Algeria",
        "American Samoa",
      .
.
.
.
.
        "Yemen",
        "Zambia",
        "Zimbabwe"}; 
	
	public JFilterPanel() {
		super();
		initFilter();
	}
	public void initFilter() {
		try {
			
			//Gender
			JPanel gender = new JPanel();
			gender.setPreferredSize(new Dimension(250, 75));
			gender.setBorder(BorderFactory.createTitledBorder("Gender"));
		    
		    jCheckBoxMale = new JCheckBox();
		    gender.add(jCheckBoxMale);
			jCheckBoxMale.setText("Male");
			jCheckBoxMale.setSelected(true);
			jCheckBoxMale.setEnabled(false);
			
			jCheckBoxFemale = new JCheckBox();
			gender.add(jCheckBoxFemale);
			jCheckBoxFemale.setText("Female");
			jCheckBoxFemale.setSelected(true);
			jCheckBoxFemale.setEnabled(false);
		
			jCheckBoxUndefined = new JCheckBox();
			gender.add(jCheckBoxUndefined);
			jCheckBoxUndefined.setText("Undefined");
			jCheckBoxUndefined.setSelected(true);
			jCheckBoxUndefined.setEnabled(false);
			
			//Age
			JPanel age = new JPanel();
			age.setPreferredSize(new Dimension(250, 75));
			age.setBorder(BorderFactory.createTitledBorder("Age"));
			
			jComboBoxAge = new JComboBox(new String[]{"all", "0 - 20", "21 - 25", "25 - 30", "over 30"});
			jComboBoxAge.setPreferredSize(new Dimension(200,30));
			jComboBoxAge.setEnabled(false);
			age.add(jComboBoxAge);
			
			//Country
			JPanel country = new JPanel();
			country.setPreferredSize(new Dimension(250, 75));
			country.setBorder(BorderFactory.createTitledBorder("Country"));
			
			jComboBoxCountry = new JComboBox(countriesnames);
			jComboBoxCountry.setPreferredSize(new Dimension(200,30));
			jComboBoxCountry.setEnabled(false);
			country.add(jComboBoxCountry);
			
			//Playcount
			JPanel playcount = new JPanel();
			playcount.setPreferredSize(new Dimension(250, 75));
			playcount.setBorder(BorderFactory.createTitledBorder("Playcount"));
			
			jComboBoxPlaycount = new JComboBox(new String[]{"all", "0 - 2000", "2001 - 5000", "5001 - 8000", "more than 8000"});
			jComboBoxPlaycount.setPreferredSize(new Dimension(200,30));
			jComboBoxPlaycount.setEnabled(false);
			playcount.add(jComboBoxPlaycount);
	     
		    this.add(gender, new GridLayout(0, 1));
		    this.add(age, new GridLayout(0, 1));
		    this.add(country, new GridLayout(0, 1));
		    this.add(playcount, new GridLayout(0, 1));
		    	
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static JCheckBox getJCheckBoxFemale() {
		return jCheckBoxFemale;
	}

	public static JCheckBox getJCheckBoxMale() {
		return jCheckBoxMale;
	}

	public static JCheckBox getJCheckBoxUndefined() {
		return jCheckBoxUndefined;
	}
	
	public static JComboBox getJComboBoxAge() {
		return jComboBoxAge;
	}
	
	public static JComboBox getJComboBoxCountry() {
		return jComboBoxCountry;
	}
	
	public static JComboBox getJComboBoxPlaycount() {
		return jComboBoxPlaycount;
	}

	public static String[] getCountriesnames() {
		return countriesnames;
	}

	public static void setCountriesnames(String[] countriesnames) {
		JFilterPanel.countriesnames = countriesnames;
	}

	public void setJComboBoxCountry() {
		this.jComboBoxCountry.removeAllItems();
		this.jComboBoxCountry.addItem("Hallo");
	}

}
 
Also: Jemand trägt irgendwo was ein in deinem Suchfeld und dann willst du den Inhalt der Box ändern. Einen Listener brauchst du dafür, egal welchen :) Da musst du halt überlegen, was du brauchst. Ein FocusListener an dem JTextFeld, in dem dein Name eingetragen wird, könnte zum Beispiel die Lösung sein.

Was meinst du mit " Er schaltet mir die Box aus und meine Anwendung knallt." ? Geht's was konkreter? Weil ich mach in meinem Codebeispiel ja nichts anderes und das funktioniert definitiv!
Kann das sein, dass du das removeAll auf dem falschen Objekt ausführst? Also z.B. nicht auf der JComboBox, sondern direkt auf dem ganzen Panel oder ähnliches?
 
Habs hin bekommen vielen Dank War gar nicht ma so einfach und doch nur 4 Zeilen Code. Hatte wirklich das falsche Objekt in den Fingern! *Danke an Alle!!*
 
Zurück