Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Object ob = i.getSource();
JComboBox cb = (JComboBox)ob;
int string_2 = cb.getSelectedIndex();
if(string_2 != 0)
{
ta.setText("Sie haben : " + string_2 + " gewählt");
}
if(string_2 == 0)
{
JOptionPane.showMessageDialog(null, "Bitte eine Datei wählen");
}
}
}
Das Problem ist:
Wenn "JOptionPane.showMessageDialog(null, "Bitte eine Datei wählen");" erscheint, muss ich zweimal
hintereinander auf OK-Button klicken, damit es weg ist. Einmal angeklickt erschein es sofort wieder.
Und sagt vieles! Bei Wahl eines neuen Items aus einer ComboBox werden zwei ItemEvents gefeuert, nämlich erst für die Abwahl des alten Elements und dann für die Auswahl des neuen Elements. Ergänze die Methode um eine if-Abfrage, ob das ItemEvent fürs (wahrscheinlich) Anwählen gefeuert wurde. ItemEvent stellt dafür eine entsprechende Methode bereit.
ta.setText("Sie haben : " + string_2 + " gewählt");
zweimal ausgeführt wird, ist dir aber schon bewusst, ja?
Einfacher wird es wohl so:
Code:
private class Action_4 implements ItemListener
{
public void itemStateChanged(ItemEvent i)
{
if(i.getStateChange() == ItemEvent.SELECTED)
{
int index = ((JComboBox)i.getSource()).getSelectedIndex();
if(index != 0)
{
ta.setText("Sie haben : " + index + " gewählt");
}
else
{
JOptionPane.showMessageDialog(null, "Bitte eine Datei wählen");
}
}
}
}
Noch einfacher wird es, wenn du, anstatt eigene Klassen für ItemListener anzulegen, diesen Listener direkt in der ComboBox implementierst. Etwa so (in einer neuen Datei):
Code:
public class SpezielleComboBox extends JComboBox implements ItemListener
{
public SpezielleComboBox(){
// Konstruktor-blabla, vor allem aber das hier:
addItemListener(this); // oder wie das heißt; ich habe gerade die Dokumentation nicht zur Hand
}
public void itemStateChanged(ItemEvent i)
{
// Code ähnlich oben
}
}
Der Vorteil dabei ist, dass i.getSource() immer this liefert, und damit spart man sich das Casten usw. Außerdem kann so ein Stück GUI-Code ausgelagert werden, sodass der Quelltext für die Hauptfensterklasse kürzer wird, da ja nur noch etwas der Art
Code:
beispielbox = new SpezielleComboBox();
add(beispielbox);