Moin,
ich komme gerade mit meinem ersten kleinen Projekt nicht weiter. Es soll ein kleines Prüfprogramm für Signalflaggen werden.
Ich habe es soweit selbst hinbekommen, dass der erste Durchlauf angezeigt wird. Wenn ich nun aber die richtige Antwort ausgewählt habe würde ich gerne einen neuen Durchlauf starten. Hierzu habe ich bereits die repaint() Methode gefunden, weiss aber nicht genau, wie ich sie anwenden soll. ein einfaches
in actionperformed tut es auf jeden Fall nicht.
Über Hilfe wäre ich sehr glücklich.
Schönen Gruß
ich komme gerade mit meinem ersten kleinen Projekt nicht weiter. Es soll ein kleines Prüfprogramm für Signalflaggen werden.
Ich habe es soweit selbst hinbekommen, dass der erste Durchlauf angezeigt wird. Wenn ich nun aber die richtige Antwort ausgewählt habe würde ich gerne einen neuen Durchlauf starten. Hierzu habe ich bereits die repaint() Methode gefunden, weiss aber nicht genau, wie ich sie anwenden soll. ein einfaches
Code:
mainpr.repaint();
in actionperformed tut es auf jeden Fall nicht.
Über Hilfe wäre ich sehr glücklich.
Schönen Gruß
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.util.Arrays;
import java.util.List;
import java.util.Collections;
public class quizframe extends JFrame implements ActionListener
{
//Definieren der Objekte
int[] Zufallszahl= new int[3];
JLabel Ueberschrift = new JLabel("Signalflaggen Lernprogramm");
JLabel Flaggelabel = new JLabel();
JLabel Ergebnislabel = new JLabel();
JButton L1 = new JButton();
JButton L2 = new JButton();
JButton L3 = new JButton();
//Definieren der Panels
JPanel Kopfpanel = new JPanel();
JPanel Flaggenpanel = new JPanel();
JPanel Loesungspanel = new JPanel();
JPanel Ergebnispanel = new JPanel();
//Konstruktor
public quizframe (String title, String[][] Flaggenliste, int[] Zufallszahl, int richtigeantwort)
{
super(title);
Ueberschrift.setFont(new Font("Courier New",Font.BOLD, 25));
Kopfpanel.add(Ueberschrift);
Flaggenpanel.setLayout( new BoxLayout(Flaggenpanel, BoxLayout.Y_AXIS));
Flaggelabel.setIcon(Flaggedarstellen(Flaggenliste[richtigeantwort][0]));
Flaggenpanel.add(Flaggelabel);
Loesungspanel.setLayout( new BoxLayout(Loesungspanel, BoxLayout.Y_AXIS));
Font Loesungsbuttonfont = new Font("Arial", Font.BOLD, 48);
L1.setText(Flaggenliste[Zufallszahl[0]][1].toString());
L2.setText(Flaggenliste[Zufallszahl[1]][1].toString());
L3.setText(Flaggenliste[Zufallszahl[2]][1].toString());
if (Zufallszahl[0] == richtigeantwort)
L1.setActionCommand("richtig");
else
L1.setActionCommand("falsch");
if (Zufallszahl[1] == richtigeantwort)
L2.setActionCommand("richtig");
else
L2.setActionCommand("falsch");
if (Zufallszahl[2] == richtigeantwort)
L3.setActionCommand("richtig");
else
L3.setActionCommand("falsch");
L1.addActionListener(this);
L2.addActionListener(this);
L3.addActionListener(this);
L1.setFont(Loesungsbuttonfont);
L2.setFont(Loesungsbuttonfont);
L3.setFont(Loesungsbuttonfont);
Loesungspanel.add(L1);
Loesungspanel.add(L2);
Loesungspanel.add(L3);
Font Ergebnisfont = new Font("Comic Sans", Font.BOLD, 30);
Ergebnislabel.setFont(Ergebnisfont);
Ergebnispanel.add(Ergebnislabel);
add (Kopfpanel,BorderLayout.NORTH);
add (Loesungspanel,BorderLayout.EAST);
add (Flaggenpanel,BorderLayout.WEST);
add (Ergebnispanel, BorderLayout.SOUTH);
setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
}
/*Automatisches Einlesen der Bilder
*
* Diese Methode liest das Verzeichnis "Flaggen" ein und speichert die Dateinamen
* in einem Array. Zusätzlich verknüpft es jede Flagge mit einer fortlaufenden
* Nummer
*/
public static String[][] einlesen(String verzeichnis)
{
File f = new File(verzeichnis);
File[] fileArray = f.listFiles();
int filezaehler = fileArray.length;
String [][] Flaglist = new String[filezaehler][2];
for (int i = 0; i < fileArray.length; i++)
{
String filename = fileArray[i].toString();
String[] filesplit = filename.split("\\\\");
String firstletter = filesplit[1].toString().substring(0,1);
String[] filesplit2 = filesplit[1].split("\\.");
String rest = filesplit2[0].toString().substring(1);
String anzeigename = firstletter.toUpperCase() + rest.toLowerCase();
Flaglist[i][0]=fileArray[i].toString();
Flaglist[i][1]= anzeigename;
}
return Flaglist;
}
/* Einbinden der Bilder. Diese Version unterstützt ebenfalls ein rescaling.
* Dies muss in der endgültigen Version nicht drin sein, wenn alle Bilder
* eine anständige Größe besitzen.
*/
public ImageIcon Flaggedarstellen(String verzeichnis)
{
MediaTracker tracker = new MediaTracker(this);
Image flaggeori = getToolkit().getImage(verzeichnis);
tracker.addImage(flaggeori, 0);
try {
//Warten, bis das Image vollständig geladen ist,
//damit getWidth() und getHeight() funktionieren
tracker.waitForAll();
} catch (InterruptedException e) {
}
int oriheight=flaggeori.getHeight(this);
int oriwidth =flaggeori.getWidth(this);
int verhaeltnis= 150;
int width = verhaeltnis * oriwidth / 100;
int height = verhaeltnis * oriheight / 100;
Image flaggescaled = flaggeori.getScaledInstance(width,height,flaggeori.SCALE_SMOOTH);
ImageIcon ausgabe = new ImageIcon(flaggescaled);
return ausgabe;
}
public static int Richtig(int[] Auswahl)
{
int i = (int)(Math.random()*3+1);
i--;
return Auswahl[i];
}
public static int[] Zufall(String[][] Flaggenarray)
{
String[] Wuerfel = new String[Flaggenarray.length];
for (int i = 0; i < Flaggenarray.length; i++)
{
Wuerfel[i] = "" + i;
}
List<String> liste = Arrays.asList(Wuerfel);
Collections.shuffle(liste);
int[] Ergebnis = new int[3];
Ergebnis[0] = Integer.parseInt(Wuerfel[0]);
Ergebnis[1] = Integer.parseInt(Wuerfel[1]);
Ergebnis[2] = Integer.parseInt(Wuerfel[2]);
return Ergebnis;
}
public static String[][] getFlaggenliste()
{
return einlesen("Flaggen");
}
public void setZufallszahl()
{
String[][] Flaggenliste = getFlaggenliste();
Zufallszahl = Zufall(Flaggenliste);
}
public static quizframe startprogramm()
{
String[][] Flaggenliste = getFlaggenliste();
int[] Zufallszahl= new int[3];
Zufallszahl = Zufall(Flaggenliste);
int richtigeantwort = Richtig(Zufallszahl);
quizframe mainpr = new quizframe( "Signalflaggen Lernprogramm", Flaggenliste, Zufallszahl, richtigeantwort ) ;
return mainpr;
}
public void actionPerformed( ActionEvent evt)
{
if (evt.getActionCommand().equals("richtig"))
{
Ergebnislabel.setText("Diese Antwort ist richtig");
// mainpr.repaint();
}
else
Ergebnislabel.setText("FALSCH!!");
repaint();
}
public static void main ( String[] args )
{
quizframe mainpr = startprogramm();
mainpr.setSize( 500,400 );
mainpr.setResizable( false );
mainpr.setVisible( true );
mainpr.repaint();
}
}