Problem bei JApplet

????

Mitglied
Hallo
dieses Applet funktioniert nur bis zum actionPerformed. Die Messages werden auch noch angezeigt nur dann bleibt der Button gedrückt, den man angecklickt hat und es geht nicht weiter. Also geht das mit dem read(); (Zeile:168) vielleicht nicht.
Vielleicht könnt ihr mir helfen.
Danke.

Java:
package fragen;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;//Buffered,FileReader

public class Quiz extends JApplet implements ActionListener {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	// Attribute
	private JLabel Fragen;
	private JButton Knopf1;
	private JButton Knopf2;
	private JButton Knopf3;
	private JButton Knopf4;
	private String Frage = "Fehler";
	private String A = "Fehler";
	private String B = "Fehler";
	private String C = "Fehler";
	private String D = "Fehler";
	private String Antworten = "Fehler";
	int P;
	private int MAX = 5;

	// Konstruktor
	public Quiz() {
		read();
	}

	// Dateien öffnen, auslesen, speichern
	public void read() {
		int z = (int) (Math.random() * MAX + 1);
		try {
			BufferedReader Datei = new BufferedReader(new FileReader(
					"Fragen.txt"));
			for (int i = 0; i < z; i++) {
				String Zeile = Datei.readLine();
				Frage = Zeile;
			}
			Datei.close();
		} catch (IOException x) {
			Frage = "Fehler";
		}

		try {
			BufferedReader Datei = new BufferedReader(new FileReader("A.txt"));
			for (int i = 0; i < z; i++) {
				String Zeile = Datei.readLine();
				A = Zeile;
			}
			Datei.close();
		} catch (IOException x) {
			A = "Fehler";
		}

		try {
			BufferedReader Datei = new BufferedReader(new FileReader("B.txt"));
			for (int i = 0; i < z; i++) {
				String Zeile = Datei.readLine();
				B = Zeile;
			}
			Datei.close();
		} catch (IOException x) {
			B = "Fehler";
		}

		try {
			BufferedReader Datei = new BufferedReader(new FileReader("C.txt"));
			for (int i = 0; i < z; i++) {
				String Zeile = Datei.readLine();
				C = Zeile;
			}
			Datei.close();
		} catch (IOException x) {
			C = "Fehler";
		}

		try {
			BufferedReader Datei = new BufferedReader(new FileReader("D.txt"));
			for (int i = 0; i < z; i++) {
				String Zeile = Datei.readLine();
				D = Zeile;
			}
			Datei.close();
		} catch (IOException x) {
			D = "Fehler";
		}

		try {
			BufferedReader Datei = new BufferedReader(new FileReader(
					"Antworten.txt"));
			for (int i = 0; i < z; i++) {
				String Zeile = Datei.readLine();
				Antworten = Zeile;
			}
			Datei.close();
		} catch (IOException x) {
			Antworten = "Fehler";
		}

		// Layout
		JPanel Platte = new JPanel();
		Platte.setLayout(new GridLayout(2, 2));
		JPanel Platte2 = new JPanel();
		Platte2.setLayout(new GridLayout(2, 1));
		JPanel Platte3 = new JPanel();
		Platte3.setLayout(new GridLayout(2, 1));
		Platte2.setBackground(new Color(209, 220, 255));

		// Buttons, Textfeld erzeugen
		Fragen = new JLabel(Frage);
		Fragen.setFont(new Font("Arial", Font.PLAIN, (int) (25)));
		Fragen.setHorizontalAlignment(JLabel.CENTER);
		Fragen.setVerticalAlignment(JLabel.CENTER);
		Knopf1 = new JButton("a) " + A);
		Knopf2 = new JButton("b) " + B);
		Knopf3 = new JButton("c) " + C);
		Knopf4 = new JButton("d) " + D);

		// Buttons mit Ereignissen verknüpfen
		Knopf1.addActionListener(this);
		Knopf2.addActionListener(this);
		Knopf3.addActionListener(this);
		Knopf4.addActionListener(this);
		JLabel Bild = new JLabel(new ImageIcon("quiz.gif"));

		// Alles einsetzen
		Platte2.add(Bild);
		Platte2.add(Fragen);
		Platte.add(Knopf1);
		Platte.add(Knopf2);
		Platte.add(Knopf3);
		Platte.add(Knopf4);
		Platte3.add(Platte2);
		Platte3.add(Platte);
		setContentPane(Platte3);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
	 */

	public void actionPerformed(ActionEvent Ereignis) {
		Object Quelle = Ereignis.getSource();
		if (Quelle == Knopf1 && Antworten.equals("A")) {
			P++;
			JOptionPane.showMessageDialog(null, "A ist richtig! Punkte: " + P);
		} else if (Quelle == Knopf2 && Antworten.equals("B")) {
			P++;
			JOptionPane.showMessageDialog(null, "B ist richtig! Punkte: " + P);
		} else if (Quelle == Knopf3 && Antworten.equals("C")) {
			P++;
			JOptionPane.showMessageDialog(null, "C ist richtig! Punkte: " + P);
		} else if (Quelle == Knopf4 && Antworten.equals("D")) {
			P++;
			JOptionPane.showMessageDialog(null, "D ist richtig! Punkte: " + P);
		} else {
			P--;
			JOptionPane.showMessageDialog(null, "Falsch! Richtig ist "
					+ Antworten + "! Punkte: " + P);
		}
		read();
	}
}
 
du hast in nem Applet doch verschiedene Funktionen die schonmal von haus aus aufgerufen werden.
z.b. init().
In der Methode wird dein Applet initialisiert, dort kannst du dann deine GUI aufbauen.
In der Methode read() würdest du dann nur deine Dateien einlesen. Die Methode kannst du dann Aufrufen wann du willst. Z.b. wie bei dir im actionListener.

Wobei ich die Dateien nur einmal beim Starten einlesen würde und mir dann alle Fragen/Antworten intern in ner List speichern würde. Damit sparst du dir dann unnötige Zugriffe auf die Festplatte.
 
Viel hab ich jetzt nicht geändert, nur die GUI erstellung in die init() verschoben.
Wie gesagt, das Einlesen solltest du auch nur am Anfang einmal machen.

Java:
            for (int i = 0; i < z; i++) {
                String Zeile = Datei.readLine();
                Antworten = Zeile;
            }
Das macht auch keinen Sinn, damit überschreibst du dir immer die aktuelle Antwort.

Java:
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import javax.swing.ImageIcon;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class Quiz extends JApplet implements ActionListener {
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    // Attribute
    private JLabel Fragen;
    private JButton Knopf1;
    private JButton Knopf2;
    private JButton Knopf3;
    private JButton Knopf4;
    private String Frage = "Fehler";
    private String A = "Fehler";
    private String B = "Fehler";
    private String C = "Fehler";
    private String D = "Fehler";
    private String Antworten = "Fehler";
    int P;
    private int MAX = 5;

    @Override
    public void init() {
        // Layout
        JPanel Platte = new JPanel();
        Platte.setLayout(new GridLayout(2, 2));
        JPanel Platte2 = new JPanel();
        Platte2.setLayout(new GridLayout(2, 1));
        JPanel Platte3 = new JPanel();
        Platte3.setLayout(new GridLayout(2, 1));
        Platte2.setBackground(new Color(209, 220, 255));

        // Buttons, Textfeld erzeugen
        Fragen = new JLabel(Frage);
        Fragen.setFont(new Font("Arial", Font.PLAIN, (int) (25)));
        Fragen.setHorizontalAlignment(JLabel.CENTER);
        Fragen.setVerticalAlignment(JLabel.CENTER);
        Knopf1 = new JButton("a) " + A);
        Knopf2 = new JButton("b) " + B);
        Knopf3 = new JButton("c) " + C);
        Knopf4 = new JButton("d) " + D);

        // Buttons mit Ereignissen verknüpfen
        Knopf1.addActionListener(this);
        Knopf2.addActionListener(this);
        Knopf3.addActionListener(this);
        Knopf4.addActionListener(this);
        JLabel Bild = new JLabel(new ImageIcon("quiz.gif"));

        // Alles einsetzen
        Platte2.add(Bild);
        Platte2.add(Fragen);
        Platte.add(Knopf1);
        Platte.add(Knopf2);
        Platte.add(Knopf3);
        Platte.add(Knopf4);
        Platte3.add(Platte2);
        Platte3.add(Platte);
        setContentPane(Platte3);

        // read data
        read();
    }

    // Dateien öffnen, auslesen, speichern
    public void read() {
        int z = (int) (Math.random() * MAX + 1);
        try {
            BufferedReader Datei = new BufferedReader(new FileReader(
                    "Fragen.txt"));
            for (int i = 0; i < z; i++) {
                String Zeile = Datei.readLine();
                Frage = Zeile;
            }
            Datei.close();
        } catch (IOException x) {
            Frage = "Fehler";
        }

        try {
            BufferedReader Datei = new BufferedReader(new FileReader("A.txt"));
            for (int i = 0; i < z; i++) {
                String Zeile = Datei.readLine();
                A = Zeile;
            }
            Datei.close();
        } catch (IOException x) {
            A = "Fehler";
        }

        try {
            BufferedReader Datei = new BufferedReader(new FileReader("B.txt"));
            for (int i = 0; i < z; i++) {
                String Zeile = Datei.readLine();
                B = Zeile;
            }
            Datei.close();
        } catch (IOException x) {
            B = "Fehler";
        }

        try {
            BufferedReader Datei = new BufferedReader(new FileReader("C.txt"));
            for (int i = 0; i < z; i++) {
                String Zeile = Datei.readLine();
                C = Zeile;
            }
            Datei.close();
        } catch (IOException x) {
            C = "Fehler";
        }

        try {
            BufferedReader Datei = new BufferedReader(new FileReader("D.txt"));
            for (int i = 0; i < z; i++) {
                String Zeile = Datei.readLine();
                D = Zeile;
            }
            Datei.close();
        } catch (IOException x) {
            D = "Fehler";
        }

        try {
            BufferedReader Datei = new BufferedReader(new FileReader(
                    "Antworten.txt"));
            for (int i = 0; i < z; i++) {
                String Zeile = Datei.readLine();
                Antworten = Zeile;
            }
            Datei.close();
        } catch (IOException x) {
            Antworten = "Fehler";
        }
    }

    /*
     * (non-Javadoc)
     *
     * @see
     * java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
     */

    public void actionPerformed(ActionEvent Ereignis) {
        Object Quelle = Ereignis.getSource();
        if (Quelle == Knopf1 && Antworten.equals("A")) {
            P++;
            JOptionPane.showMessageDialog(null, "A ist richtig! Punkte: " + P);
        } else if (Quelle == Knopf2 && Antworten.equals("B")) {
            P++;
            JOptionPane.showMessageDialog(null, "B ist richtig! Punkte: " + P);
        } else if (Quelle == Knopf3 && Antworten.equals("C")) {
            P++;
            JOptionPane.showMessageDialog(null, "C ist richtig! Punkte: " + P);
        } else if (Quelle == Knopf4 && Antworten.equals("D")) {
            P++;
            JOptionPane.showMessageDialog(null, "D ist richtig! Punkte: " + P);
        } else {
            P--;
            JOptionPane.showMessageDialog(null, "Falsch! Richtig ist "
                    + Antworten + "! Punkte: " + P);
        }
        read();
    }
}
 
Und es ist unmöglich mit minimalen nachdenken selbst auf die Lösung zu kommen???

:autsch:

Text von fast allen Komponenten kann man mit setText(String pString) ändern...

Also nicht new Button machen, sondern die vorhandene Instanz .setText machen
 

Zurück
Oben