# Würfel



## new(Rup7or) (28. Jan 2011)

hallo ich habe ein Programm schreiben müssen um die Hintergrundfarbe eines Fensters zu ändern, da hab ich mich mit viel Mühe und noch mehr Hilfe durchgeboxt mit folgendem code

```
import java.awt.*;                             // Color
import javax.swing.*;          //JFrame, JPanel, JLabel
import java.awt.event.*;                    // Listener
/**
 * Erzeugen eines Fensters mit Text und Button.
 */
public class Farbe
  extends JFrame
  implements ActionListener
{
 /**
 * Konstante, Aendern der Hintergrundsfarbe.
 */
  static public String ACTION_SET = "aendern";
/**
 * Konstante, Beenden des Programms.
 */
  static public String ACTION_QUIT = "Ende";
/**
 * Content Pane, Darstellungsbereich des Fensters.
 */
  private JPanel contentPane;
/**
 * Konstruktor, baut das Fenster auf.
 * @param titel Titelleistentext
 * @param farbe Fensterhintergrundsfarbe
 */
  public Farbe( String titel, Color farbe)
  {
// Titelleiste
    super( titel);

// Darstellungsbereich
    contentPane = new JPanel();
    contentPane.setBackground( farbe);
                             // Button Set mit Listener
    JButton btSet = new JButton( ACTION_SET);
    contentPane.add( btSet);
    btSet.addActionListener( this);
                                         // Label Hallo
    JLabel lbHallo = new JLabel( "Switch!");
    contentPane.add( lbHallo);
                            // Button Quit mit Listener
    JButton btQuit = new JButton( ACTION_QUIT);
    contentPane.add( btQuit);
    btQuit.addActionListener( this);
// Fenster
                           // Fensterinhalt uebernehmen
    setContentPane( contentPane);
    pack();              // Anpassen der Fenstergroesse
                              // Beenden durch x-Button
    setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE);
    setVisible( true);                // Sichtbarmachen
  }
/**
 * Ereignisverarbeitung, ActionListener,
 * Betaetigen eines Button.
 */
  public void actionPerformed( ActionEvent ae)
  {
    String command = ae.getActionCommand();
// Farbwechsel durch Button Set
    if( command.equals( ACTION_SET))
    {
      float dummy1 = ( float)Math.random();
      float dummy2 = ( float)Math.random();
      float dummy3 = ( float)Math.random();
      Color farbe = new Color( dummy1, dummy2, dummy3);
	  contentPane.setBackground( farbe);
    }
// Programmabbruch durch Button Quit
    if( command.equals( ACTION_QUIT))
    {
      System.exit( 0);
    }
  }
/**
 * Aufruf des Programms.
 */
  public static void main(String args[])
  {
    Farbe fa = 
      new Farbe( "Farbwechsel", Color.yellow);
  }
}
```
jetzt möchte ich dieses Programm so ändern das nicht die Farbe geändert wird sondern dass durch den set Button gewürfelt werden kann. anstelle des Schrifuges "switch" soll eben eine zufalls zahl des Würfels stehen. 
sitze da schon länger dran und bekomm leider nichts hin -.-
hier meine ersten änderungsversuche

```
import java.awt.*;                             // Color
import javax.swing.*;          //JFrame, JPanel, JLabel
import java.awt.event.*;                    // Listener
/**
 * Erzeugen eines Fensters mit Text und Button.
 */
public class GUIWuerfel
  extends JFrame
  implements ActionListener
{
/**
 * Konstante, zur Würfelausführung.
 */
  static public String ACTION_SET = "Wurf";
/**
 * Konstante, Beenden des Programms.
 */
  static public String ACTION_QUIT = "Ende";
/**
 * Content Pane, Darstellungsbereich des Fensters.
 */
  private JPanel contentPane;
/**
 * Konstruktor, baut das Fenster auf.
 * @param titel Titelleistentext
 * @param farbe Fensterhintergrundsfarbe
 * @param zahl gewürfelte Zahl
 */
  public GUIWuerfel( String titel, Color farbe, Integer zahl)
  {
// Titelleiste
    super( titel);
/*
// Darstellungsbereich
    contentPane = new JPanel();
    contentPane.setBackground( farbe);
                             // Button Wurf mit Listener
    JButton btWurf = new JButton( ACTION_SET);
    contentPane.add( btWurf);
    btWurf.addActionListener( this);
                                         // Label Mit Würfelanzeige!!!!!!!!!!!!!!!!!
    JLabel lbWurf = new Jlabel (lbWurf.setText(" " + zahl));
	//JLabel lbWuerfelzahl = new JLabel( "Würfel");
    //contentPane.add( lbWuerfelzahl;
                            // Button Quit mit Listener
    JButton btQuit = new JButton( ACTION_QUIT);
    contentPane.add( btQuit);
    btQuit.addActionListener( this);
*/
// Fenster
                           // Fensterinhalt uebernehmen
    setContentPane( contentPane);
    pack();              // Anpassen der Fenstergroesse
                              // Beenden durch x-Button
    setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE);
    setVisible( true);                // Sichtbarmachen
  }
/**
 * Ereignisverarbeitung, ActionListener,
 * Betaetigen eines Button.
 */
  public void actionPerformed( ActionEvent ae)
  {
    String command = ae.getActionCommand();
/*
// Farbwechsel durch Button Set
    if( command.equals( ACTION_SET))
    {
      float dummy1 = ( float)Math.random();
      float dummy2 = ( float)Math.random();
      float dummy3 = ( float)Math.random();
      Color farbe = new Color( dummy1, dummy2, dummy3);

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

/* ------------------------------------------------- */
/**
 * Aufruf des Programms.
 */
  public static void main(String args[])
  {
    GUIWuerfel roll = 
      new GUIWuerfel( "Würfel", Color.red);
  }
}
```


----------



## XHelp (28. Jan 2011)

Es gibt doch da auf den ersten Blick kein "Schriftzug switch". Du könntest es ja mit konkreten Fragen versuchen, dann würden die Antworten nicht so schwer fallen.
Generell: ein JLabel zu plazieren kann nicht schaden. Wie man eine zufällige Zahl bekommt, hast du schon im Code. Und den Text änderst du mit 
	
	
	
	





```
setText
```


----------



## new(Rup7or) (28. Jan 2011)

ja, die zufallszahl mach ich mit Math.random(), denk ich mal. aber ich bekomms dennoch iwi nicht hin. also ich wüsste gern wie ich es anstelle das das der würfel würfelt und die zahl in einem label angezeigt wird.


----------



## XHelp (28. Jan 2011)

Steht doch schon da:
JLabel setzen, im Listener würfeln und anzeigen. Warum das meiste, was du brauchst, auskommentiert ist, ist mir allerdings ein Rätsel


----------



## new(Rup7or) (28. Jan 2011)

das hab ich gemacht um nicht durcheinander zu kommen, is ja auch wurst^^
kann ich für das würfeln 
dann sowas wie 
	
	
	
	





```
public void wuerfeln
	{
	zahl =(int) (Math.random() * 6 ) 
	return zahl;

	}
```
 hinzufügen?


----------



## XHelp (28. Jan 2011)

1. Generiert es dir Zahlen im Bereich [0,5]
2. void Methoden haben keine Rückgabe, da du int zurückgeben willst, solltest du die Methode etwas anpassen


----------



## new(Rup7or) (28. Jan 2011)

also dann eher 
public int wuerfeln

```
{
    zahl =(int) (Math.random() * 7 ); 
    return zahl;
 
    }
```
jetzt hab ich die Zahlen von [0,6] muss nur noch iwi die null ausschließen

ansonsten hab ich jetzt was anderes probiert 
	
	
	
	





```
public void actionPerformed( ActionEvent ae)
  {
    String command = ae.getActionCommand();
/*
// Farbwechsel durch Button Set
    if( command.equals( ACTION_SET))
    {
      int zahl =(int) (Math.random() * 7 ); 
	  

      contentPane.setText( zahl);
    }
```
und diese
	
	
	
	





```
public GUIWuerfel( String titel, Color farbe, Integer zahl)
  {
// Titelleiste
    super( titel);

// Darstellungsbereich
    contentPane = new JPanel();
    contentPane.setBackground( farbe);
                             // Button Wurf mit Listener
    JButton btWurf = new JButton( ACTION_SET);
    contentPane.add( btWurf);
    btWurf.addActionListener( this);
                                         // Label Mit Würfelanzeige!!!!!!!!!!!!!!!!!
    JLabel lbWurf = new Jlabel (lbWurf.setText(" " + zahl));
	

	
	
	//JLabel lbWuerfelzahl = new JLabel( "Würfel");
    //contentPane.add( lbWuerfelzahl;
                            // Button Quit mit Listener
    JButton btQuit = new JButton( ACTION_QUIT);
    contentPane.add( btQuit);
    btQuit.addActionListener( this);
*/
// Fenster
                           // Fensterinhalt uebernehmen
    setContentPane( contentPane);
    pack();              // Anpassen der Fenstergroesse
                              // Beenden durch x-Button
    setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE);
    setVisible( true);                // Sichtbarmachen
  }
```

also das sind die Änderungen des ursprünglichen Textes
kann das so funktionieren?


----------



## XHelp (28. Jan 2011)

new(Rup7or) hat gesagt.:


> kann das so funktionieren?



Mit einer leeren 
	
	
	
	





```
actionPerformed
```
? Ich glaube nicht.
Zu den Zufallszahlen. mit 
	
	
	
	





```
Math.random()*6
```
 sind die Zahlen im Bereich 0..5. Ein einfaches 
	
	
	
	





```
+1
```
 reicht also, um daraus 1..6 zu machen


----------



## new(Rup7or) (28. Jan 2011)

ich hoffe das mit der leeren actionPerformed bezog sich nur auf die ausklammerung also so dann

```
public void actionPerformed( ActionEvent ae)
  {
    String command = ae.getActionCommand();

// Würfeln wegen
    if( command.equals( ACTION_SET))
    {
      int zahl =(int) (Math.random() * 6 + 1 ); 
	  

      contentPane.setText( zahl);
    }

// Programmabbruch durch Button Quit
    if( command.equals( ACTION_QUIT))
    {
      System.exit( 0);
    }
  }
```
ist das besser?


----------



## XHelp (28. Jan 2011)

Funktioniert das?
Btw: Konstanten sind 
	
	
	
	





```
final
```


----------



## new(Rup7or) (28. Jan 2011)

das mit der final konstante weis ich grad nich wie ich das machen soll
der rest scheint auch nich zu gehen mein Code sieht inzwischen so aus


```
import java.awt.*;                             // Color
import javax.swing.*;          //JFrame, JPanel, JLabel
import java.awt.event.*;                    // Listener
/**
 * Erzeugen eines Fensters mit Text und Button.
 */
public class GUIWuerfel
  extends JFrame
  implements ActionListener
{
/**
 * Konstante, zur Würfelausführung.
 */
  static public String ACTION_SET = "Wurf";
/**
 * Konstante, Beenden des Programms.
 */
  static public String ACTION_QUIT = "Ende";
/**
 * Content Pane, Darstellungsbereich des Fensters.
 */
  private JPanel contentPane;
/**
 * Konstruktor, baut das Fenster auf.
 * @param titel Titelleistentext
 * @param farbe Fensterhintergrundsfarbe
 * @param zahl gewürfelte Zahl
 */
  public GUIWuerfel( String titel, Color farbe, Integer zahl)
  {
// Titelleiste
    super( titel);
 
// Darstellungsbereich
    contentPane = new JPanel();
    contentPane.setBackground( farbe);
                             // Button Wurf mit Listener
    JButton btWurf = new JButton( ACTION_SET);
    contentPane.add( btWurf);
    btWurf.addActionListener( this);
                                         // Label Mit Würfelanzeige!!!!!!!!!!!!!!!!!
    JLabel lbWurf = new Jlabel (lbWurf.setText(" " + zahl));
    //JLabel lbWuerfelzahl = new JLabel( "Würfel");
    contentPane.add( lbWurf);
                            // Button Quit mit Listener
    JButton btQuit = new JButton( ACTION_QUIT);
    contentPane.add( btQuit);
    btQuit.addActionListener( this);

// Fenster
                           // Fensterinhalt uebernehmen
    setContentPane( contentPane);
    pack();              // Anpassen der Fenstergroesse
                              // Beenden durch x-Button
    setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE);
    setVisible( true);                // Sichtbarmachen
  }
/**
 * Ereignisverarbeitung, ActionListener,
 * Betaetigen eines Button.
 */
  public void actionPerformed( ActionEvent ae)
  {
    String command = ae.getActionCommand();
 
// Würfeln wegen
    if( command.equals( ACTION_SET))
    {
      int zahl =(int) (Math.random() * 6 + 1 ); 
      
 
      contentPane.setText( zahl);
    }
 
// Programmabbruch durch Button Quit
    if( command.equals( ACTION_QUIT))
    {
      System.exit( 0);
    }
  }
/**
 * Aufruf des Programms.
 */
  public static void main(String args[])
  {
    GUIWuerfel roll = new GUIWuerfel( "Wuerfel", Color.red);
  }
}
```

aber weiter bin ich dennoch nicht


----------



## XHelp (28. Jan 2011)

"Scheint nicht zu gehen" heißt? Debugausgaben sind auch immer hilfreich, sowas wie System.out.println("Button wurde geklickt")


----------

