JComboBox Auswahl

MX76

Mitglied
Guten Abend Zusammen!

In der GUI gibt es zwei JComboBoxen. Ich möchte gerne, dass bei z.B. Auswahl "Schnitzel" in der ersten ComboBox der passende Preis in der zweiten ComboBox angezeigt wird. Das funktioniert nur leider mit den ersten zwei Einträgen. Sobald ich die beiden Boxen um mehrere Einträge erweitere geht das ganze nicht mehr.
Bitte um Hilfe. Vielen Dank;)!

Liebe Grüße
Stefan

Java:
import java.awt.event.ItemEvent;
public class NewJDialog extends javax.swing.JDialog
{
public NewJDialog(java.awt.Frame parent,boolean modal)
    {
    super(parent,modal);
    initComponents();
    }
    private void initComponents() {
        box1 = new javax.swing.JComboBox();
        box2 = new javax.swing.JComboBox();
        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        box1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Schnitzel Schwein", "Schnitzel Pute", "Schnitzel Sur", "Pommes Frites", "Wedges", "Kartoffelsalat" }));
       
            box1.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                bothComboHandler(evt);
            }
        });
        box2.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "1,25€", "1.43€", "1,33€", "1,79€", "1,79", "1,79" }));
        box2.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                bothComboHandler(evt);
            }
        });
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(box1, javax.swing.GroupLayout.PREFERRED_SIZE, 200, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(box2, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(36, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(box1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(box2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(178, Short.MAX_VALUE))
        );
        pack();
    }
    private void bothComboHandler(java.awt.event.ItemEvent evt) {
        if(evt.getStateChange()==ItemEvent.SELECTED)
            {
            if(evt.getSource()==box1)
                {
                if(box1.getSelectedIndex()==0)
                    {
                    box2.setSelectedIndex(1);
                    }
                if(box1.getSelectedIndex()==1)
                    {
                    box2.setSelectedIndex(0);
                    }
                }
            else
                {
                if(box2.getSelectedIndex()==0)
                    {
                    box1.setSelectedIndex(1);
                    }
                if(box2.getSelectedIndex()==1)
                    {
                    box1.setSelectedIndex(0);
                    }
                }
            }
    }
 
public static void main(String args[])
    {
    java.awt.EventQueue.invokeLater(new Runnable()
    {
    public void run()
        {
        NewJDialog dialog=new NewJDialog(new javax.swing.JFrame(),true);
        dialog.addWindowListener(new java.awt.event.WindowAdapter()
        {
        public void windowClosing(java.awt.event.WindowEvent e)
            {
            System.exit(0);
            }
        });
        dialog.setVisible(true);
        }
    });
    }
    private javax.swing.JComboBox box1;
    private javax.swing.JComboBox box2;
}
 
Zuletzt bearbeitet von einem Moderator:
C

Camino

Gast
Ein bisschen seltsam, die 2. ComboBox brauchst du ja eigentlich garnicht um etwas auszuwählen, sondern nur, um je nach Auswahl der 1. ComboBox etwas anzuzeigen.

Na ja, das Problem liegt wohl an deinem bothComboHandler:
Java:
...
private void bothComboHandler(java.awt.event.ItemEvent evt) {
        if(evt.getStateChange()==ItemEvent.SELECTED)
            {
            if(evt.getSource()==box1)
                {
                if(box1.getSelectedIndex()==0)
                    {
                    box2.setSelectedIndex(1);
                    }
                if(box1.getSelectedIndex()==1)
                    {
                    box2.setSelectedIndex(0);
                    }
                }
...

Wenn box1 der Index gleich 0 ist, dann soll box2 der Index auf 1 gesetzt werden. Wenn box1 der Index gleich 1 ist, soll box2 der Index auf 0 gesetzt werden. Warum erwartest du, dass bei den anderen (ausser den ersten beiden) was passieren soll, wenn du das nicht auch in der dazugehörigen Methode reinschreibst?

Sieht aber auch ansonsten alles ein bisschen umständlich aus und lässt sich bestimmt noch verbessern. Kannst ja mal beschreiben, worauf das letztlich hinauslaufen soll. Vielleicht gibt es da auch bessere Möglichkeiten.

Du könntest z.B. eine eigene Klasse anlegen, welche Variablen für den Namen (String) und den Preis (double, falls du später damit rechnen willst) hat. Dann erstellst du Objekte von dieser Klasse für jedes einzelne Essen und fügst diese Objekte der 1. ComboBox hinzu. In der ComboBox lässt du dir den Namen anzeigen und in einem JLabel neben der ComboBox den dazugehörigen Preis anzeigen.
 
Zuletzt bearbeitet von einem Moderator:

MX76

Mitglied
Hi,

erstmal Danke für Deinen Tip! Mit der zweiten ComboBox hast Du natürlich recht.
Wie kann ich es machen, wenn ich ca. 200 Artikel habe, wobei ich einen davon in der combobox auswählen möchte und dann den dazugehörigen Preis in einem jlabel oder jtextfield anzeigen möchte!
Wäre über ein paar Zeilen Code echt dankbar!

Liebe Grüße
Stefan
 
C

Camino

Gast
Wie liegen diese Daten denn vor? Hast du die irgendwo gespeichert (Textdatei, XML, Datenbank) und liest die ein?
 

Crian

Top Contributor
Steht doch in Caminos Tipp. Schreib eine kleine Klasse für das Gericht, erzeuge deine zweihundert Gerichte in einer Liste (ich weiß nicht, ob 200 Dinge in einer Combobox sinnvoll sind, aber das ist eine andere Frage), und zeige den Preis daneben in einem Label an.

Java:
public class Artikel {
    private String name;
    private int preis; /* in Cent */

    public Artikel(Sting name, int preis) {
        this.name = name;
        this.preis = preis;
    }

    public String getName() {
        return name;
    }

    public int getPreis() {
        return preis;
    }
}

Java:
List<Artikel> artikelListe = new ArrayList<>();
artikelListe.add(new Artikel("Schnitzel Schwein", 12345));
....
 
C

Camino

Gast
Man kann in eine ComboBox eben auch Objekte hinzufügen und diese dann mit getSelectedItem() bestimmen und dann den gewünschten Wert des Objektes (hier z.B. den Preis) in einem JLabel mit setText() anzeigen lassen.
 
C

Camino

Gast
ich weiß nicht, ob 200 Dinge in einer Combobox sinnvoll sind

Das kommt noch dazu, dass man sich genau überlegen muss, wie man das strukturiert und was Sinn macht. Deshalb fragte ich ja am Anfang, was da letztlich rauskommen soll, also wofür das eingesetzt wird und welchen Umfang das ganze haben soll. Ich hab z.B. eine ComboBox mit Bankinstituten (mehr als 10000), die nach Auswahl die dazugehörige BLZ in ein Textfeld schreibt. Über die Eingabe ins Textfeld kann ich dann auch noch die Einträge in der ComboBox filtern. War allerdings ein bisschen tricky, diese Wechselwirkung zwischen den beiden Komponenten so hinzukriegen.
 

Crian

Top Contributor
Das glaub ich gern. Bei Artikeln könnte man ja auch mehrere Comboboxen haben mit Kategorie, Unterkategorie und eigentlichem Artikel, wobei die "Unter-Comboboxen" dann immer befüllt (und enabled) werden, wenn weiter vorn eine Auswahl getroffen wurde. Ist sicher auch etwas kniffelig, aber für den Benutzer vermutlich übersichtlicher.
 

Mujahiddin

Top Contributor
Wieso machst du nicht einfach eine Map - Identifier/Produkt(String) -> Price(Double)
Du kannst beim Initialisieren der JComboBoxen mittels keySet() an das Produkt kommen und über
Code:
map.get(produkt);
an den Preis.

Ich stelle mir das so vor:

Java:
public static void main(String... args) {
	String[] products = { "Schnitzel Schwein", "Schnitzel Pute", "Schnitzel Sur", "Pommes Frites", "Wedges", "Kartoffelsalat" };
	Double[] prices = { 1.25, 1.43, 1.33, 1.79, 1.79, 1.79 };
	BoxPair<String, Double> pair = BoxPair.of( forArrayPair( products, prices ) );
	/* 
	 * myComponent.add(pair.keys);
	 * myComponent.add(pair.values);
	 *
	 */
}

public static final <K, V> Map<K, V> forArrayPair(final K[] ks, final V[] vs) {
	if( ks.length != vs.length )
		throw new IllegalArgumentException( "Unequal length" );
	final Map<K, V> map = new HashMap<>();
	for( int i = 0; i < ks.length; i++ )
		map.put( ks[ i ], vs[ i ] );
	return map;
}

public static final class BoxPair <K, V> {
	
	public final Map<K, V> map;
	public final JComboBox<K> keys;
	public final JComboBox<V> values;
	
	private BoxPair(final JComboBox<K> keys, final JComboBox<V> values, Map<K, V> map) {
		this.keys = keys;
		this.values = values;
		this.map = map;
	}
	
	public static final <K, V> BoxPair<K, V> of(final Map<K, V> map) {
		final Set<K> set = map.keySet();
		final JComboBox<K> keys = new JComboBox<>();
		final JComboBox<V> values = new JComboBox<>();
		for( K k : set ) {
			keys.addItem( k );
			values.addItem( map.get( k ) );
		}
		return new BoxPair<>( keys, values, map );
	}
}

Das ist insofern nützlich, als es im Nachhinein ein Leichtes wird, umzusteigen auf etwas anderes (z.B. Autocomplete Search Textfield), falls JComboBox nicht das beste erscheint.
 
Zuletzt bearbeitet:

Crian

Top Contributor
Preise sollten nicht in double gespeichert werden, sondern als Cent, Zehntelcent oder was auch immer als Integer. Davon ab ich eine Klasse gegenüber Erweiterungen sinnvoller als eine Map.
 

MX76

Mitglied
Vielen Dank für die vielen Tips...!
Werde es Heute Abend gleich mal ausprobieren und mich wieder melden!
Danke an Alle...:)!

Liebe Grüße
Stefan
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J JComboBox - Auswahl auslesen Java Basics - Anfänger-Themen 2
R Auf auswahl in ner JComboBox reagieren Java Basics - Anfänger-Themen 3
P Auswahl von JComboBox abfangen Java Basics - Anfänger-Themen 3
W JComboBox- Auswahl schließt komplettes Fenster Java Basics - Anfänger-Themen 10
E Meine JCombobox werte an ohne selectiert zu haben Java Basics - Anfänger-Themen 6
D Probleme mit dem Windowbuilder und JComboBox Java Basics - Anfänger-Themen 2
J Selektiertes Element von jComboBox zwischenspeichern und wieder einsetzen Java Basics - Anfänger-Themen 0
C Erste Schritte JComboBox Einträge auf Duplikat prüfen Java Basics - Anfänger-Themen 4
A Mit JComboBox Ergebnis einen Integer aus einer anderen Klasse aufrufen. Java Basics - Anfänger-Themen 2
M JComboBox ersten Eintrag leerlassen bzw. Platzhalter Java Basics - Anfänger-Themen 1
Tommy135 Klassen jComboBox macht nicht was sie soll Java Basics - Anfänger-Themen 4
S ArrayListe in einer JComboBox anzeigen Java Basics - Anfänger-Themen 10
H JComboBox wird nicht angezeigt Java Basics - Anfänger-Themen 3
M JComboBox feste double Werte zu ordnen Java Basics - Anfänger-Themen 8
T Einträge in jComboBox aus Liste übernehmen Java Basics - Anfänger-Themen 1
T Auslesen mehrerer jComboBox (-en) Java Basics - Anfänger-Themen 4
H JCombobox Java Basics - Anfänger-Themen 1
D JComboBox duplizieren Java Basics - Anfänger-Themen 2
T jComboBox Java Basics - Anfänger-Themen 9
GadgetSofa jComboBox mit dem Button verbinden. Aber wie?? Java Basics - Anfänger-Themen 4
A GUI Absturz nach 3x benutzen einer JComboBox Java Basics - Anfänger-Themen 11
S Erste Schritte JComboBox Java Basics - Anfänger-Themen 1
S JCombobox und JButton verknüpfen Java Basics - Anfänger-Themen 6
S JComboBox automatisch füllen Java Basics - Anfänger-Themen 3
C JComboBox "Hilfstext" anzeigen Java Basics - Anfänger-Themen 11
T Datentypen Jcombobox Array Java Basics - Anfänger-Themen 1
J JComboBox in andere Klasse Java Basics - Anfänger-Themen 2
S Variablen auslesen beim JCombobox Java Basics - Anfänger-Themen 0
K JCombobox Eclipse Java Basics - Anfänger-Themen 7
D JComboBox erzeugen Java Basics - Anfänger-Themen 1
T JComboBox Java Basics - Anfänger-Themen 3
B ArrayLists in JCombobox Java Basics - Anfänger-Themen 10
M JComboBox und ItemListener/ItemEvent Problem Java Basics - Anfänger-Themen 3
N Compiler-Fehler JComboBox DefaultListCellRenderer Java Basics - Anfänger-Themen 2
J jcombobox.getSelectedItem - nullpointerexception Java Basics - Anfänger-Themen 3
C JComboBox setSelectedItem(Object) Problem Java Basics - Anfänger-Themen 5
M JComboBox Obergrenzen/Untergrenze festlegen? Java Basics - Anfänger-Themen 5
B JComboBox(editable) Java Basics - Anfänger-Themen 6
K JComboBox hat volle Höhe uber das gesamte JPane, warum? Java Basics - Anfänger-Themen 2
S JComboBox mit ArrayList füllen Java Basics - Anfänger-Themen 7
C Ausgewähltes Element einer JCombobox in JTextField Java Basics - Anfänger-Themen 3
S JComboBox füllen Java Basics - Anfänger-Themen 9
C JComboBox Java Basics - Anfänger-Themen 9
T Frage zu JComboBox Java Basics - Anfänger-Themen 6
G JComboBox wird nicht gezeichnet Java Basics - Anfänger-Themen 3
N JComboBox mit Dateinamen befüllen Java Basics - Anfänger-Themen 7
M JComboBox => Item String => Color Java Basics - Anfänger-Themen 2
StrikeTom Editable JComboBox + enter Wie??? Java Basics - Anfänger-Themen 3
J JComboBox Listener Java Basics - Anfänger-Themen 6
F Werte aus JComboBox auslesen und Zahlen zuordnen Java Basics - Anfänger-Themen 5
S JComboBox Platzhalter Java Basics - Anfänger-Themen 7
J jComboBox auf default setzen wie? Java Basics - Anfänger-Themen 3
J daten über jComboBox ausgeben wie? Java Basics - Anfänger-Themen 2
S Vector -> String JComboBox Java Basics - Anfänger-Themen 11
E JComboBox Java Basics - Anfänger-Themen 4
J jComboBox.getSelectedIndex() Java Basics - Anfänger-Themen 8
J Funktion Auslösen über JComboBox Java Basics - Anfänger-Themen 2
T JComboBox klappt nur ein- bis zweimal auf Java Basics - Anfänger-Themen 30
S Kein Event bei Click auf JComboBox Java Basics - Anfänger-Themen 4
Developer_X JComboBox getSelectedFilè??? Java Basics - Anfänger-Themen 4
T Daten eines Ordners in JCombobox anzeigen Java Basics - Anfänger-Themen 5
M Einträge in JComboBox farblich hinterlegen? Java Basics - Anfänger-Themen 2
6 Dritte JComboBox in Abhaengigkeit von zwei vorherigen Java Basics - Anfänger-Themen 4
G 2. JComboBox in Abhängigkeit der 1. JCombobox füllen Java Basics - Anfänger-Themen 2
S Problem mit JComboBox Java Basics - Anfänger-Themen 9
H jcombobox mit nur einem Item Java Basics - Anfänger-Themen 7
G Inhalt einer JComboBox wechseln Java Basics - Anfänger-Themen 5
G Problem mit JComboBox Java Basics - Anfänger-Themen 15
G JComboBox Strukturiert anzeigen Java Basics - Anfänger-Themen 6
Schandro Hotkeys bei JComboBox abschalten Java Basics - Anfänger-Themen 3
G JComboBox soll beim Öffnen eine andere JCB öffnen Java Basics - Anfänger-Themen 2
P Hilfe für JComboBox, bmp einbinden/bestimmte punkte auf bmp Java Basics - Anfänger-Themen 3
G JComboBox - BasicComboPopup Java Basics - Anfänger-Themen 4
S Inhalt der JComboBox vergrößtert die JCB ? Java Basics - Anfänger-Themen 2
B Werte aus einer JCombobox in eine Liste Java Basics - Anfänger-Themen 16
mwildam JComboBox FocusGained feuert nicht wenn editable Java Basics - Anfänger-Themen 4
F ComboBox im Vektor auslesen, Vektor<JComboBox> Java Basics - Anfänger-Themen 6
S Jcombobox und 2maliges anzeigen wegen ItemStateChanged? Java Basics - Anfänger-Themen 3
W setModel feuert ActionEvent bei JComboBox Java Basics - Anfänger-Themen 2
G Frage zu JComboBox Java Basics - Anfänger-Themen 2
W Actionlistener oder Itemlistener bei JCombobox ? Java Basics - Anfänger-Themen 4
G JComboBox Java Basics - Anfänger-Themen 7
G JComboBox macht Probleme Java Basics - Anfänger-Themen 7
G JComboBox alphabetisch sortieren Java Basics - Anfänger-Themen 2
D Locale zur Laufzeit über JComboBox laden? Java Basics - Anfänger-Themen 17
G JComboBox um eine Methode erweitern Java Basics - Anfänger-Themen 2
G jcombobox deaktivieren Java Basics - Anfänger-Themen 4
M Werte aus Jcombobox sollten als int-Werte zurück gegeben . Java Basics - Anfänger-Themen 7
D Items in JComboBox überprüfen Java Basics - Anfänger-Themen 3
G JComboBox zweckentfremden ? Java Basics - Anfänger-Themen 5
N JCombobox Pfeil nach unten bild auf linke seite, geht das? Java Basics - Anfänger-Themen 8
T JComboBox Problem Java Basics - Anfänger-Themen 4
D JComboBox titel Java Basics - Anfänger-Themen 16
M füllen JComboBox funktioniert nicht Java Basics - Anfänger-Themen 11
J JCombobox Item auswählen Java Basics - Anfänger-Themen 13
A Text einer JComboBox während der Laufzeit ändern ? Java Basics - Anfänger-Themen 4
dercheffe 3x jcombobox nacheinander füllen Java Basics - Anfänger-Themen 6
J Inhalt der JComboBox variable Java Basics - Anfänger-Themen 2
O JComboBox Item soll sich als String speichern Java Basics - Anfänger-Themen 5
D JComboBox ohne ItemListener Java Basics - Anfänger-Themen 18

Ähnliche Java Themen

Neue Themen


Oben