Gui Würfel. String Problem.

  • Themenstarter Themenstarter Würfelbecher
  • Beginndatum Beginndatum
W

Würfelbecher

Gast
Hallo, ich hoffe ihr könnt mir helfen. Ich habe folgendes Problem. Ich versuche eine Gui zu erzeugen die aus 2 Buttons und einer Ausgabe besteht. Auf Wurf soll sich die Ausgabe verändern und durch Ende das ganze geschlossen werden. Allerdings komme ich immer auf folgende Fehlermeldung

Würfeln.java:98:error:cannot find symbol
new Würfeln<"Würfelbecher", aString>;

symbot: variable aString
location:class Würfeln

ich bedanke mich schon einmal für jede Hilfe.

Java:
import javax.swing.*; //JFrame, JPanel, JLabel
import java.awt.event.*; // Listener
import java.util.*;

/**
* Ausgabe des Schriftzugs "Wuerfeln!",
* Erzeugen eines Fensters mit Text und Button.
*/
public class Würfeln
extends JFrame
implements ActionListener
{
/* ------------------------------------------------- */
// View
/**
* Konstante, würfeln durch Button Wurf.
*/
public static final String ACTION_SET = "Wurf";

/**
* Konstante, Beenden des Programms.
*/
public static final String ACTION_QUIT = "Ende";

/**
* Content Pane, Darstellungsbereich des Fensters.
*/
private JLabel lbAugen;

/**
* Konstruktor, baut das Fenster auf.
* @param titel Titelleistentext
* @param farbe Fensterhintergrundfarbe
*/
public Würfeln( String titel, String aString)
{
//Titelleiste
super( titel);

//Darstellungsbereich
JPanel contentPane = new JPanel();
// Button Set mit Listener
JButton btWurf = new JButton( ACTION_SET);
contentPane.add( btWurf);
btWurf.addActionListener( this);
// Label Augen
lbAugen = new JLabel( "0");
contentPane.add( lbAugen);
lbAugen.setText( aString);

// Button Quit mit Listener
JButton btEnde = new JButton( ACTION_QUIT);
contentPane.add( btEnde);
btEnde.addActionListener( this);

//Fenster
// Fensterinhalt uebernehmen
setContentPane( contentPane);
pack(); // Anpassen der Fenstergroesse
// Beenden durch x-Button
setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE);
setVisible( true); // Sichtbarmachen
}

/* ------------------------------------------------- */
// Controller
/**
* Ereignisverarbeitung, ActionListener,
* Betaetigen eines Button.
*/
public void actionPerformed( ActionEvent ae)
{
String command = ae.getActionCommand();

//Würfeln durch Button Wurf und erzeugen der zahl.
if( command.equals( ACTION_SET))
{
Random rand = new Random();
int aInt=rand.nextInt(6-1);
String aString = Integer.toString(aInt);
lbAugen.setText( aString);
}

//Programmabbruch durch Button Quit
if( command.equals( ACTION_QUIT))
{
System.exit( 0);
}
}

/* ------------------------------------------------- */
/**
* Hauptmethode, erzeugt Fenster mit Schrift und Button.
*/
public static void main(String args[])
{
	Würfeln würfeln =
	new Würfeln("Würfelbecher", aString);
}
}
 
Na ja, Du willst aString ja dem Konstruktor übergeben, also in der main-Methode:

Java:
public static void main(String args[])
{
    String aString = "whatever";
    Würfeln würfeln =
    new Würfeln("Würfelbecher", aString);
}

Code:
aString
sollte dann natürlich einen Wert haben, den Du weiter verwendest 😉
 
Danke. Ich war einfach blind das nicht zu sehen. Jetzt hab ich nur noch das Problem, dass er nicht die Zahlen 1-6 ausgibt sondern 0-4.
 
Ich hab sowas auch mal auf die Schnelle geschrieben:

Java:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;

/**
 * @author hütte
 */
public class Würfelbecher {

    private static final Random RAN = new Random();
    private JLabel label = new JLabel("-1", SwingConstants.CENTER);
    private MyThread myThread;

    private class MyThread extends Thread {

        private volatile boolean running = true;
        private int i = 0;

        public void stopp() {
            running = false;
            interrupt();
        }

        @Override
        public void run() {
            while (running && i < 100) {
                label.setText(Integer.toString(RAN.nextInt(6) + 1));
                try {
                    sleep((long) (499.0 / 9801.0 * Math.pow(i++, 2.0)) + 1L);
                } catch (InterruptedException ie) {
                    running = false;
                    interrupt();
                }
            }
        }
    }

    public Würfelbecher() {
        JFrame frame = new JFrame("Würfelbecher");
        JButton start = new JButton("Starten");
        JButton stopp = new JButton("Stoppen");
        JPanel south = new JPanel();

        frame.setLayout(new BorderLayout());
        frame.add(label, BorderLayout.CENTER);
        frame.add(south, BorderLayout.SOUTH);

        south.add(start);
        south.add(stopp);

        start.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                myThread = new MyThread();
                myThread.start();
            }
        });

        stopp.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                if (myThread != null) {
                    myThread.stopp();
                }
            }
        });

        frame.pack();
        frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        new Würfelbecher();
    }
}

Aber ein paar Anmerkungen dazu:
  1. Konstruktoraufruf in der main,
  2. Logik innerhalb des Konstruktors,
  3. sleep innerhalb Schleife,
  4. Aufruf von interrupt in Thread,
  5. direktes Ableiten von Thread.
 

Zurück
Oben