JComboBox- Auswahl schließt komplettes Fenster

Status
Nicht offen für weitere Antworten.

waxweazle

Mitglied
Hi,
mein Problem ist folgendes:
Ich habe ein JDialog Fenster in dem mehrere Elemente intigriert sind, unter anderem auch eine JComboBox mit 2 verschiedenen Auswahlmöglichkeiten.
Code:
   combob[i] = new JComboBox(new String[] {"Mensch","Computer"});
Da ich von den Elementen 4 brauche, initialisiere ich es via for Schleife.
Das Fenster funktioniert auch wunderbar, das einzige was nicht funktioniert, ist das JComboBox Element.
Wenn ich dort nämlich die Auswahl der Box öffne und eine der beiden Möglichkeiten auswähle, schließt sich das komplette Fenster einfach....

Ich weiß nicht warum das so ist! Muss man bei JComboBoxen noch Code generieren, der das wechseln der Inhalte bemerkt und anzeigt oder habt Ihr eine Idee warum sich das Fenster einfach schließt???
 
B

Beni

Gast
Also das Fenster indem die Elemente stehen schliesst sich? Das wäre das normale Verhalten einer ComboBox (und dann sollte auch die neue Auswahl angezeigt werden).

Falls es ein anderes Fenster ist... dann poste bitte deinen Code, damit man sich das angucken kann.
 

waxweazle

Mitglied
ok der Code ist ein bißchen länger und da es sich noch alles in der Entwicklung befindet, sind noch nicht alle Funktionen so, wie sie einmal sein sollen...

Also es schließt sich nicht nur die ComboBox sondern das komplette Fenster in dem sich die Box befindet!!!

Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.lang.*;


/*
* Dialogfenster um beim Spielstart, den einzelnen Spielern Name und Farben zuzuweisen
* und um auszuwählen, ob der Spieler Mensch oder Computer sein soll
*/
public class SpielerAnzahlDialog extends JDialog implements ActionListener, ItemListener
{
  private GridBagLayout gbl;
  private GridBagConstraints gbc;
  private JPanel pan;

  private JCheckBox[] checkb;
  private JLabel[] farbe;
  private JTextField[] tf;
  private JComboBox[] combob;

  private JLabel lbl1,lbl2;
  private JButton btnStarten, btnAbbrechen;
  private int antwort = 0;


// Layout, des Spieler-Auswahlfensters
  public SpielerAnzahlDialog(Frame owner, String titel)
  {
    super(owner, titel, true);
    gbl = new GridBagLayout();
    getContentPane().setLayout(gbl);
    pan = new JPanel(new GridBagLayout());
    setLocationRelativeTo(null);

    checkb = new JCheckBox[4];
    farbe = new JLabel[4];
    tf = new JTextField[4];
    combob = new JComboBox[4];

/*
* Größe des Fensters wird festgelegt, es wird mittig zum Bildschirm ausgerichtet
* und die Anderung der Größe wird ausgeschalten
*/
    this.setSize(275,200);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    this.setLocation( (d.width - this.getWidth()) / 2,
                     (d.height - this.getHeight()) / 2);
    this.setResizable(false);

    farbe[0] = new JLabel("blau", JLabel.RIGHT);
    farbe[1] = new JLabel("rot", JLabel.RIGHT);
    farbe[2] = new JLabel("gelb", JLabel.RIGHT);
    farbe[3] = new JLabel("grün", JLabel.RIGHT);

//Textzeile wird eingefügt
    lbl1 = new JLabel("Boxen für Spielerauswahl aktivieren");
    gbc = neueZelle(1,4,0,0,0,0);
    gbc.insets =new Insets(5,1,1,1);
    this.getContentPane().add(lbl1, gbc);
/*
* Da wir mit max 4 Spielern spielen, wird die Anordnung der Auswahlfelder
* in einer Schleife realisiert.
* Es wird zuerst jedes Erforderliche Element initialisiert.
* Dannach wird mit der Funktion neueZelle, genau diese mit Ihren Eigenschaften erschaffen
* und nun kann man das erzeugte Element hinzufügen
* Dies geschieht 4 mal
*/
    for(int i=0; i<4; i++)
    {
      checkb[i] = new JCheckBox();
      checkb[i].addItemListener(this);     //zum Abfangen von Ereignissen wir der IL angebunden
      checkb[i].setSelected(false);        //alle Boxen werden default auf disable gesetzt
      gbc = neueZelle(1,1,0,i+1,0,0);
      this.getContentPane().add(checkb[i], gbc);

      gbc = neueZelle(1,1,1,i+1,0,0);
      this.getContentPane().add(farbe[i], gbc);   //Farbenlabels werden implementiert

      tf[i] = new JTextField("Spieler" + (i+1));  //default Spielername ist Spieler 1 , 2 etc
      tf[i].setEditable(false);                   //solange der checkboxbutton nicht aktiviert ist, kann man den Namen nicht ändern
      gbc = neueZelle(1,1,2,i+1,0,0);
      this.getContentPane().add(tf[i], gbc);

      combob[i] = new JComboBox(new String[] {"Mensch","Computer"});   //erstellt Combobox zur Auswahl des Spielertyps
      combob[i].addActionListener(this);
      combob[i].setEnabled(false);                                     //solange der checkboxbutton nicht aktiviert ist,
                                                                       //kann man den Typ nicht ändern
      combob[i].setEditable(false);                                    //editierbarkeit ist ausgeschalten
      gbc = neueZelle(1,1,3,i+1,0,0);
      this.getContentPane().add(combob[i], gbc);
    }

//Leerzeile wird eingefügt
    lbl2 = new JLabel("");
    gbc = neueZelle(1,4,0,5,0,0);
    gbc.insets =new Insets(5,5,5,5);
    this.getContentPane().add(lbl2, gbc);

/*
* nun werden noch 2 Button, Starten und Beenden in das Dialogfenster implementiert
*/
    btnStarten = new JButton("Starten");
    btnStarten.addActionListener(this);
    gbc = neueZelle(1,1,2,6,0,0);
    this.getContentPane().add(btnStarten, gbc);

    btnAbbrechen = new JButton("Abbrechen");
    btnAbbrechen.addActionListener(this);
    gbc = neueZelle(1,1,3,6,0,0);
    this.getContentPane().add(btnAbbrechen, gbc);


  }//end of SpielerAnzahlDialog


// ----- Logik des SpielerAnzahlDialogd Fenster--------------------------------
  public void actionPerformed(ActionEvent ae)
  {
    Object object = ae.getSource();

    if(object.equals(btnStarten))
    {
//prüft wieviele Spieler teilnehmen
        int SpielerAnz = 0;
        for(int i=0 ; i<4; i++)
        {
            if(checkb[i].isSelected()== true)
            SpielerAnz ++;
        }
/*
*wenn mindestens 2 Spieler teilnehmen, wird überprüft, ob es sich um Computerspieler oder Menschliche
*handelt und die entsprechenden Werte werden übergeben. Dann startet das Spiel
*/
        if (SpielerAnz > 1)
       {
          for(int i=0; i<4 ; i++)
        {
          if(checkb[i].isSelected())
          {
             if("Mensch".equals(combob[i].getSelectedItem()))
             {

             }
             if("Computer".equals(combob[i].getSelectedItem()))
             {

             }
          }
        }  
      }
 
// wenn weniger als 2 Spieler ausgewählt sind erscheint eine Fehlermeldung
        else
        {
            JOptionPane.showMessageDialog(this,
               "Sie müssen mindestens zwei Spieler auswählen, um anfangen zu können!",
               "Fehler",JOptionPane.ERROR_MESSAGE);
        }
    }

//Fenster wird wieder geschlossen
    if(object.equals(btnAbbrechen))
    	antwort = 0;

        setVisible(false);
        dispose();
  }

  public int getAntwort()
  {
    return antwort;
  }

/*
* Wenn der Benutzer einer der Checkboxen aktiviert, kann er den Namen des Spielers und dessen Typ auswählen
* Wenn die Checkbox deaktiviert wird, werden auch die entsprechenden Namen und Typfelder wieder deaktiviert
*/
  public void itemStateChanged(ItemEvent ie)
  {
      for(int i=0; i<4; i++)
      {
        if (checkb[i] == ie.getItemSelectable())
        {
          tf[i].setEditable(!tf[i].isEditable());
          combob[i].setEnabled(!combob[i].isEnabled());
          i = 4;
        }
      }

      boolean enabled = false;
      for(int j=0; j<4; j++)
      {
         if (combob[j].isEnabled() && "Computer".equals( (String) combob[j].getSelectedItem()))
         {
            enabled = true;
         }
      }
   }


  //---- GridBagLayout aufbau ---------------------------------------------------

  private GridBagConstraints neueZelle(int hoehe, int breite, int xpos, int ypos, double x_ausd, double y_ausd)
  {
    GridBagConstraints gbc = new GridBagConstraints();
    gbc.insets =new Insets(1,1,1,1);
    gbc.fill = GridBagConstraints.BOTH;
    gbc.gridwidth = breite;
    gbc.gridheight = hoehe;
    gbc.gridx = xpos;
    gbc.gridy = ypos;
    gbc.weightx = x_ausd;
    gbc.weighty = y_ausd;
    return gbc;
  }

}

So ich hoffe das hilft nun weiter !!!!
 

Wildcard

Top Contributor
Kein wunder:
Wenn man etwas in der Combobox auswählt wird die actionPerformed Methode aufgerufen bei der dann das passiert:
Code:
    if(object.equals(btnAbbrechen)) 
    
       antwort = 0; 

        setVisible(false); 
        dispose();

Du solltest hier vieleicht mit annonymen inneren Klassen für die actionListener arbeiten:
Code:
    JButton button = new JButton();
     button.addActionListener(new ActionListener()
    {
        public void actionPerformed(ActionEvent e)
        {
            // TODO Auto-generated method stub

        }
    });
 

Sky

Top Contributor
Es reicht vollkommen aus die Anweisungen im If-Fall in einen Block zu setzen:

Code:
if(object.equals(btnAbbrechen)) { // Neue Klammer
  antwort = 0; 
  setVisible(false); 
  dispose(); 
} // Neue Klammer
 

Wildcard

Top Contributor
sky80 hat gesagt.:
Es reicht vollkommen aus die Anweisungen im If-Fall in einen Block zu setzen:
Hab ich auch dran überlegt, war aber nicht sicher ob er das so will, weil ich zu faul war mir den code anzuschauen :wink:
 

waxweazle

Mitglied
Oh, ich wusste gar nicht , dass er, wenn man den ActionListener anhängt, ohne da schon wirklich eine Logik hinter ist, eine andere Funktion (in dem Fall den Abbrechen Button) nimmt.

Ich habe den actionListener erst mal auskommentiert, weil ich mir gerade gar nicht sicher bin, ob ich den überhaupt brauche.... (sieht im Moment ja nicht so aus) und es funktioniert!!!

Dank an alle
 

Sky

Top Contributor
waxweazle hat gesagt.:
Oh, ich wusste gar nicht , dass er, wenn man den ActionListener anhängt, ohne da schon wirklich eine Logik hinter ist, eine andere Funktion (in dem Fall den Abbrechen Button) nimmt.

Ich habe den actionListener erst mal auskommentiert, weil ich mir gerade gar nicht sicher bin, ob ich den überhaupt brauche.... (sieht im Moment ja nicht so aus) und es funktioniert!!!

Dank an alle

Also, dass, was Du gerade geschrieben hast, verstehe ich nicht!

Was er immer macht, wenn man einen Button klickt, ist die Methode 'actionPerformed' aufrufen.

Und so, wie Du sie implementiert hattest, hat er halt immer
Code:
setVisible(false); 
dispose();
ausgeführt, weil dies nicht in dem if-Block zu deinem btnAbbrechen steht.
 

Wildcard

Top Contributor
waxweazle hat gesagt.:
Oh, ich wusste gar nicht , dass er, wenn man den ActionListener anhängt, ohne da schon wirklich eine Logik hinter ist, eine andere Funktion (in dem Fall den Abbrechen Button) nimmt.
Das ist ja auch nicht der Fall.
Code:
     combob[i].addActionListener(this);
hier weist du den listener zu.
Wenn jetzt eine Aktion ausgeführt wird geht er in die actionPerformed Methode wo dann das passiert:
Code:
     if(object.equals(btnAbbrechen)) 
    
       antwort = 0; 
    //hier ist der if-Teil beendet da du keine Klammern gesetzt hast


    //das wird also in jedem Fall ausgeführt
        setVisible(false); 
        dispose();

Wenn du ihn nicht brauchst ist ja gut, aber ich rate trotzdem immer zu annonymen inneren Klasse, da
jede Komponente dann ihre eigene actionPerformed Methode hat und es so übersichtlicher wird.
[edit]2l8[/edit]
 

waxweazle

Mitglied
ähm ja eigentlich soll ja auch jedes Element seine eigene Funktion mittels ActionListener bekommen...
ich glaube, ich muss noch mal in den Code schauen und Klammern suchen...
denn so wir Ihr das meint, wollte ich es ja auch machen ?!?!? :?
 

Wildcard

Top Contributor
waxweazle hat gesagt.:
ähm ja eigentlich soll ja auch jedes Element seine eigene Funktion mittels ActionListener bekommen...
Wie gesagt, das geht dann so:

Code:
     JButton button = new JButton(); 
     button.addActionListener(new ActionListener() 
    { 
        public void actionPerformed(ActionEvent e) 
        { 
            doSomething(); 

        } 
    });

     JButton button2 = new JButton(); 
     button2.addActionListener(new ActionListener() 
    { 
        public void actionPerformed(ActionEvent e) 
        { 
            doSomethingDifferent(); 

        } 
    });
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M JComboBox Auswahl Java Basics - Anfänger-Themen 10
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
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