# Wer wird Millionär / Fragefenster



## Gelöschtes Mitglied 55561 (20. Mai 2017)

Moin,
ich programmiere gerade eine Art "Wer wird Millionär" und ich habe dabei das Problem das der Button nach der 1. Frage im 2. Fragefenster Automatisch gedrückt wird....
Ich hoffe ihr versteht mein Problem und könnt mir helfen.
Ich weiß ist nicht gerade sauber programmiert....

Hier mein Hauptprogramm:

```
package Spiel;

import javax.swing.JOptionPane;

public class Hauptprogramm
{

    public static void main(String[] args) // Anfang Hauptprogramm
    {
        //--------------------Variablendeklaration--------------------
       
       
       
        MillionaerUpdate MU = new MillionaerUpdate();// konstruiert ein Spiel
       
        String     Menü;
        int        menü;
       
       
        //--------------------Eingaben & Ausgaben--------------------
        do
        {
        Menü= JOptionPane.showInputDialog    ("Was möchten Sie tun? \n" +
                                             "1. Spielen\n" +
                                             "2. Spiel beenden");
       
        menü = Integer.parseInt(Menü);

       
           
        switch(menü)
        {
        case 1:
                    MU.Spiel();
                    break;
                   
        case 2:        System.exit( 0 );
                   
           
        default:    JOptionPane.showMessageDialog(null, "Falsche Eingabe!");
                     break;
        }
       
        }while(!(menü==1 || menü==2));
    }
}
```

Und hier die die Class wo mein Problem ist:

```
package Spiel;

import javax.swing.*;
import java.awt.*; //Alle Pakete von AWT werden eingebunden
import java.awt.event.*; //Wird benötigt für ActionListener


public class MillionaerUpdate implements ActionListener{
   
    private JFrame Rahmen = new JFrame("Wirst du Millionär? Frage 1.");
    private JPanel Platte = new JPanel();
   
   
   
    private JLabel Label = new JLabel ("Alle Wege führen nach....?");
    private JButton Knopf1 = new JButton ("Malle");
    private JButton Knopf2 = new JButton ("Rom");
    private JButton Knopf3 = new JButton ("Athen");
    private JButton Knopf4 = new JButton ("New York");
    private int i = 0;
    private boolean antwort = false;
   
   
    public MillionaerUpdate() {                                        //Konstruktor
        JOptionPane.showMessageDialog(null, "Wirst du Millionär?");
    }
   
    public void Spiel() {
        Rahmen.setSize (800,500);
        Rahmen.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
        Platte.setLayout(new GridLayout(5, 1));
       
        Platte.add (Label);                                       
        Platte.add (Knopf1);
        Platte.add (Knopf2);
        Platte.add (Knopf3);
        Platte.add (Knopf4);
           
        Rahmen.setContentPane (Platte);   
        Rahmen.setLocation(400,200);
       
        Knopf1.addActionListener(this);//fügt ActionListener hinzu damit der Computer weiß das ein Knopf gedrückt wurde
        Knopf2.addActionListener(this);
        Knopf3.addActionListener(this);
        Knopf4.addActionListener(this);
       
        Rahmen.setVisible(true); 
    }
   
    public void actionPerformed(ActionEvent a) {
        i++;
        do {
        switch(i) {
       
        case 1:
           
            if(a.getSource() == Knopf1)
            {
                Knopf1.setBackground(Color.RED);
                Knopf1.removeActionListener(this);//wird entfernt damit der Knopf nicht nochmal gedrückt werden kann
                antwort= false;
            }
            else if(a.getSource() == Knopf2)
            {
                Knopf2.setBackground(Color.GREEN);
                Knopf2.removeActionListener(this);
                antwort= true;
            }
            else if(a.getSource() == Knopf3)
            {
                Knopf3.setBackground(Color.RED);
                Knopf3.removeActionListener(this);
                antwort= false;
            }
            else if(a.getSource() == Knopf4)
            {
                Knopf4.setBackground(Color.RED);
                Knopf4.removeActionListener(this);
                antwort= false;
            }
           
            richtigfalsch();
            break;
           
           
           
           
           
        case 2:
            antwort=false;
            Rahmen.dispose();
           
            Rahmen = new JFrame("Wirst du Millionär? Frage 2.");
            Platte = new JPanel();
            Label = new JLabel ("Der längste Fluss der Welt ist....?");
            Knopf1 = new JButton ("der Rhein");
            Knopf2 = new JButton ("die Schwentine");
            Knopf3 = new JButton ("der Amazonas");
            Knopf4 = new JButton ("der Nil");
           
            Spiel();
       
            if(a.getSource() == Knopf1)
            {
                Knopf1.setBackground(Color.RED);
                Knopf1.removeActionListener(this);//wird entfernt damit der Knopf nicht nochmal gedrückt werden kann
                antwort= false;
            }
            else if(a.getSource() == Knopf2)
            {
                Knopf2.setBackground(Color.RED);
                Knopf2.removeActionListener(this);
                antwort= false;
            }
            else if(a.getSource() == Knopf3)
            {
                Knopf3.setBackground(Color.RED);
                Knopf3.removeActionListener(this);
                antwort= false;
            }
            else if(a.getSource() == Knopf4)
            {
                Knopf4.setBackground(Color.GREEN);
                Knopf4.removeActionListener(this);
                antwort= true;
            }
           
            richtigfalsch();
            break;
                }
       
        }while(antwort==true);
       
    }
   
    public void richtigfalsch () {
        if(antwort == true) {
            i++;
            JOptionPane.showMessageDialog(null, "Richtig!");
        } else {
            JOptionPane.showMessageDialog(null, "Leider falsch, vielleicht klappt es beim nächsten mal! \n Das Programm wird jetzt beendet.");
            System.exit( 0 );
        }
    }
   
   
   
}
```


----------



## Gelöschtes Mitglied 55561 (21. Mai 2017)

Push


----------



## VfL_Freak (22. Mai 2017)

Moin,


xCRZ hat gesagt.:


> Ich hoffe ihr versteht mein Problem


nein, offen gestanden nicht 



xCRZ hat gesagt.:


> Knopf1.removeActionListener(*this*);_//wird entfernt damit der Knopf nicht nochmal gedrückt werden kann_


Hier würde es doch vermutlich reichen, den Button zu disablen ("Knopf1.setDisabled(false"), oder?

BTW: vermeide Umlaute in Variablennamen (also 'menue' statt 'menü') !!

VG KLaus


----------



## Joose (22. Mai 2017)

Entferne die do/while-Schleife aus dem ActionListener! Du erhöhst am Anfang deines ActionListener deine Variable "i" .. danach wird für die 1.Frage die Lösung abgefragt, danach kommst du zur Abfrage der 2.Frage ... da du immer noch im ActionListener bist ist immer noch der selbe Knopf wie vorher gedrückt 

Generell solltest du deinen Code nochmal überarbeiten.
Die do/while im ActionListener ist eine schlechte Wahl. Außerdem solltest du die Methode "Spiel()" neu aufrufen, sondern einfach die vorhandenen Komponenten wiederverwenden und nur deren Inhalt anpassen.


----------



## Gelöschtes Mitglied 55561 (23. Mai 2017)

Danke erstmal für die Antworten, aber irgendwie versteh ich das noch nicht ganz. 
Ich benötige doch eine Schleife im ActionListener damit ich vom Case 1 ins Case 2 komme. Nehme ich sie raus und beantworte die 1. Frage bleibt er im Fenster der 1. Frage und nix passiert mehr


----------



## Harry Kane (24. Mai 2017)

xCRZ hat gesagt.:


> Ich benötige doch eine Schleife im ActionListener damit ich vom Case 1 ins Case 2 komme.


Du benötigst zwar eine Schleife, aber definitiv nicht im ActionListener. Es ist i. A. hilfreich, sich den Programmablauf aufzumalen oder aufzuschreiben, bevor man mit dem Coden loslegt. In deinem Fall könnte der PLan ungefär so aussehen (ich beschränke mich auf das Spiel selber. Die Abfrage ob spielen der nicht, funzt ja).
Level auf 1 setzen.
Solange antwort true ist (antwort ist ein doofer Name für eine boolesche Variable. Besser ist antwortRichtig)
Frage und 4 Antworten zum aktuellen Level laden. Fragetext kommt auf das JLabel, die Antworten auf die JButtons.
Beim drücken eines JButton: herausfinden, welcher der 4 Knöpfe gedrückt wurde, und prüfen, ob er die richtige Antwort war. Passenden JDialog anzeigen. Falls Antwort falsch: antwort auf false setzen, Spiel wird beendet. Falls antwort richtig, level um 1 erhöhen, und nächste Frage beschaffen.


xCRZ hat gesagt.:


> Nehme ich sie raus und beantworte die 1. Frage bleibt er im Fenster der 1. Frage und nix passiert mehr


Das kommt daher, weil du eine komplett neuen Gui erzeugst (JFrame mit JLabel und JButtons), die aber nicht anzeigst. Benenne besser einfach die schon vorhandenen JButtons/JLabels um, und setze den Title vom JFrame neu..


----------



## Blender3D (26. Mai 2017)

Bau dir vor der GUI ein Klasse Frage die die Frage und die Antworten beinhaltet und die richtige Antwort kennt.
Die Fragen könntest Du aus einer Datei laden. z.B.
Wann begann der Erste Weltkrieg?
1914
1912
1918
1900
Wo war ... ?
..
..

Dann erst gehe an die GUI heran. Die Funktionen sollten aber mit einem Parameter Frage versehen werden, um die
aktuelle Frage darzustellen.
Andern Falls wirst du spätesten mit Deinem Programm scheitern wenn Du neue Fragen benötigst.


----------

