Swing Model für ComboBox

Lls27

Mitglied
Hallo ,

sofern ich weiß kann man mit dem Befehl
Java:
 String[] patternExamples = {
                "a",
                "b"
                 };

eine Combobox (Dropdownmenü) erstellen.

Ich möchte nun,dass beim auswählen von z.B. "a" eine Variable x eine bestimmten Wert erhält.
Dieser sollte dann auch angezeigt werden.

Ich dachte an einen if Befehl, doch leider hab ich keine Idee wie ich da ansetzen soll.

Es sollte am Ende etwa so aussehen: Widerstandsfarbcode (Widerstandskennzeichnung Widerstandsbestimmung Widerstandscode)
(etwas runterscrollen, dann kommt ein Kohleschichtwiderstandberechner)


Danke im Vorraus 🙂
 
Zuletzt bearbeitet von einem Moderator:
Ne, kann man nicht. Damit intialisiert man ein String-Array und füllt es gleich. Kannst an der ComboBox einen ItemListener registrieren. Der wird immer aufgerufen, sobald ein Wert an bzw. abgewählt wird. (Was meistens parallel passiert.)
 
Ich kenne diesen Befehl jetzt direkt nicht habe folgendes gefunden:


Java:
 if (e.getStateChange() == ItemEvent.SELECTED) {
        label.setVisible(true);
        ...
    } else {
        label.setVisible(false);

Was ich dadraus entlesen kann ist, dass beim Wählen eines Button sich der Wert ändert

doch wie bring ich da jetzt die Variablen ein?
 
Die Combobox besitzt die Methoden getSelectedItem() und getSelectedIndex(). Sollten selbsterklärend sein. Den Wert, den du verändern willst und den Inhalt der Box könntest du über eine HashMap linken.

Nach dem du das Label invisible gesetzt hast wirst du vermutlich neu zeichnen müssen. Allerdings ist es so (Vermutung!) nicht gut, da bei jeder Änderung der Box der Listener aufgerufen wird. Also 1x beim deselecten des alten Wertes und 1x beim selecten des neuen.
 
Nicht nicht elegant, es wird nur vermutlich nichts bringen, da es durch den deselect !visible und durch den sofortigen select visible wird. Oder umgekehrt, die Listeneraufrufreihenfolge ist nicht genormt. Die Implementation hängt natürlich von deinem restlichen Programm ab. Das war nur ein Vorschlag, aber ich weiß ja garnicht woher die Werte kommen oder was sie bedeuten.
 
Und falls du jetzt "schwarz" auswählst soll der Widerstand "0, 0, 0xFFFFFFFF" ausgewählt werden? Dann würde ich das so machen. (Nur im Board geschrieben, bin schon ziemlich müde.)

Java:
private static final Map<String, Widerstand> WIDERSTAND_MAP = new HashMap<String, Widerstand>() {
	{
		put("scharz", new Widerstand(0, 0, -1, -1, 0xFFFFFFFF);
		put("braun", new Widerstand(1, 1, 10, 1, 0x..);
		put("rot", new Widerstand(2, 2, 100, 2, 0x..);
		put("orange", new Widerstand(3, 3, 1000, -1, 0x..);
		...
	}
}

private static final String[] WIDERSTAND_KEYS = {
	"schwarz",
	"braun",
	"rot",
	"orange",
	...
}

public void method() {
	final JComboBox box = new JComboBox(WIDERSTAND_KEYS);
	box.addItemListener(new ItemListener() {
		public void itemChanged(ItemEvent arg0) {
			if(arg0.getStateChanged() == ItemEvent.SELECTED) {
				Widerstand widerstand = WIDERSTAND_MAP.get(box.getSelectedItem().toString());
				if(widerstand != null) {
					//Tu was damit
				} else {
					System.err.println("Widerstand not found");
				}
			}
		}
	});
}

Keine Ahnung, was Widerstand auf englisch heißt.
 
Also ich würde da nicht den Umweg über eine Map gehen. Einfach eine Enum Widerstand machen mit toString Methode die dir "schwarz" usw. zurückggibt.
Java:
public enum Widerstand
{
  SCHWARZ("schwarz",0,0,-1,-1,0xFFFFFFFF),
  BRAUN("braun",1, 1, 10, 1, 0x..)
  ....
  ;
public final int farbe,ring1,ring2,ring3,ring4;
public final name;

public Widerstand(String label,int r1,int r2, int r3, int r4, int farbe)
{
  name=label;
  ring1=r1;.....
}
@Override
public String toString()
{
return name;
}
}
Die kannst du dann einfach so in deine Combobox packen, durch die toString Methode wird der richtige Text angezeigt.
Java:
JComboBox box=new JComboBox();
for(Widerstand w:Widerstand.values())
{
box.addItem(w);
}
 
Zuletzt bearbeitet:
Sprich:
Java:
String[] patternExamples = {
                JComboBox box=new JComboBox();
for(Widerstand w:Widerstand.values())
{
box.addItem(w);
}
                 };

so etwa?
 
Soweit hab ichs verstanden
leider kommt bei mir nichts und man beachte, dass ich ebenfalls mehrere Comboboxes erstellen muss
vorallem beim erstellen vom GUI kommt bei mir nichts
 
Zuletzt bearbeitet:
Das man dir alles in den ***** ******** muss....
Java:
import java.awt.BorderLayout;


public class ComboBoxIASB extends JFrame
{
	
	private JPanel contentPane;
	private JPanel panel;
	
	/**
	 * Launch the application.
	 */
	public static void main(String[] args)
	{
		EventQueue.invokeLater(new Runnable()
			{
				public void run()
				{
					try
					{
						ComboBoxIASB frame = new ComboBoxIASB();
						frame.setVisible(true);
					} catch (Exception e)
					{
						e.printStackTrace();
					}
				}
			});
	}
	
	/**
	 * Create the frame.
	 */
	public ComboBoxIASB()
	{
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(new BorderLayout(0, 0));
		setContentPane(contentPane);
		
		JComboBox<Widerstand> comboBox = new JComboBox<Widerstand>();
		for(Widerstand w:Widerstand.values())
		{
			comboBox.addItem(w);
		}
		comboBox.addItemListener(new ItemListener(){

			@Override
			public void itemStateChanged(ItemEvent e)
			{
				if(e.getStateChange()==ItemEvent.SELECTED)
				{
					Widerstand w=(Widerstand)e.getItem();
					panel.setBackground(new Color(w.farbe));
				}
				
			}
			
		});
		contentPane.add(comboBox, BorderLayout.NORTH);
		
		panel = new JPanel();
		contentPane.add(panel, BorderLayout.SOUTH);
	}
	
	enum Widerstand
	{
	  SCHWARZ("schwarz",0,0,-1,-1,0x0),
	  BRAUN("braun",1, 1, 10, 1, 0x552020),
	  ROSA("rot",99,99,99,99,0xFF0000);
	  
	public final int farbe,ring1,ring2,ring3,ring4;
	public final String name;
	 
	private Widerstand(String label,int r1,int r2, int r3, int r4, int f)
	{
	  this.name=label;
	  ring1=r1;
	  ring2=r2;
	  ring3=r3;
	  ring4=r4;
	  farbe=f;
	}
	@Override
	public String toString()
	{
	return name;
	}
	}
	
}
 
erstmal tut es mir leid für meine "Dummheit". Ich bin noch jung und erfahren, das sind meine ersten Schritte in Java.
Ich möchte mich noch herzlich bedanken für die schnellen und hilfreichen Antworten.

Als Letztes würde ich gerne fragen warum sich bei mir die Fehlermeldung :
EventQueue cannot be resolved
The method setVisible(boolean) is undefined for the type ComboBoxIASB

zeigt?
 

Zurück
Oben