# Würfel mit Bildanzeige



## Elyt (2. Feb 2020)

Hallo allerseits für ein Projekt, möchte ich einen Würfel erstellen, der auch eine Anzeige hat.
Somit also einen jButton, mit dem man eine Zufallszahl erzeugt welche dann in Form eines Bildes auf einem jLabel angezeigt wird.
Von mir aus reicht auch ein einfaches math.random()*6+1. Ich frage mich nun nur, wo in meinem Code ich diese Methode einbetten soll. Ich hoffe jemand kann mir damit weiterhelfen. Vielen Dank!


```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;


public class Spieloberflaeche2 extends JFrame {

  private JLabel jLabelSpielfeld = new JLabel();
  private JButton bWuerfeln = new JButton();
  private JLabel jLabelAugenzahl = new JLabel();
 
  public Spieloberflaeche2() {

    super();
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    int frameWidth = 1280;
    int frameHeight = 1043;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    setTitle("Spieloberflaeche2");
    setResizable(false);
    Container cp = getContentPane();
    cp.setLayout(null);
    
    jLabelSpielfeld.setBounds(16, 8, 1049, 985);
    jLabelSpielfeld.setText("");
    jLabelSpielfeld.setIcon(new ImageIcon("Spielfeld.png"));
    cp.add(jLabelSpielfeld);
    bWuerfeln.setBounds(1088, 920, 161, 65);
    bWuerfeln.setText("Würfeln");
    bWuerfeln.setMargin(new Insets(2, 2, 2, 2));
    bWuerfeln.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        bWuerfeln_ActionPerformed(evt);
      }
    });
    cp.add(bWuerfeln);
    jLabelAugenzahl.setBounds(1104, 760, 129, 129);
    jLabelAugenzahl.setText("");
    cp.add(jLabelAugenzahl);
    
    setVisible(true);
  }
 
 
  public static void main(String[] args) {
    new Spieloberflaeche2();
  }
 
  public void bWuerfeln_ActionPerformed(ActionEvent evt) {
    
  }

}
```


----------



## Blender3D (2. Feb 2020)

Elyt hat gesagt.:


> Hallo allerseits für ein Projekt, möchte ich einen Würfel erstellen, der auch eine Anzeige hat.




```
import javax.swing.JFrame;

public class start {
    public static void main(String[] args) {       
        JFrame frame = new JFrame( "Dice" );
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame .add(new GamePanel(400, 400));
        frame.pack();
        frame.setResizable(false);
        frame.setVisible(true);   
    }   
}
```


```
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;

@SuppressWarnings("serial")
public class GamePanel extends JPanel {
    private DiceLabel dice = new DiceLabel(70, Color.WHITE, Color.GRAY);
    private JButton rollDice = new JButton("Würfeln");

    public GamePanel(int width, int height) {
        setPreferredSize(new Dimension(width, height));
        setLayout(null);
        setBackground(Color.DARK_GRAY);
        add(dice);
        add(rollDice);
        Dimension d = dice.getPreferredSize();
        dice.setBounds(width / 2 - d.width / 2, height / 2 - d.height / 2, d.width, d.height);
        d = new Dimension(100, 50);
        rollDice.setBounds(width - d.width, height - d.height, d.width, d.height);
        rollDice.setFocusable(false);
        rollDice.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                dice.rollDice();
            }
        });
    }
}
```


```
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.util.Random;
import javax.swing.JLabel;

@SuppressWarnings("serial")
public class DiceLabel extends JLabel {
    private static Random rnd = new Random();
    private int value;
    private Color eyeColor;
    private Color diceColor;
    private int inset = 2;

    public DiceLabel(int size, Color eyeColor, Color diceColor) {
        setPreferredSize(new Dimension(size, size));
        this.eyeColor = eyeColor;
        this.diceColor = diceColor;
    }

    private void drawFive(Graphics g, int size, int eyeSize) {
        drawFour(g, size, eyeSize);
        drawOne(g, size, eyeSize);
    }

    private void drawFour(Graphics g, int size, int eyeSize) {
        drawTwo(g, size, eyeSize);
        g.fillOval(inset + eyeSize / 2, size - 2 * inset - eyeSize, eyeSize, eyeSize);
        g.fillOval(size - 2 * inset - eyeSize, inset + eyeSize / 2, eyeSize, eyeSize);
    }

    private void drawOne(Graphics g, int size, int eyeSize) {
        g.fillOval(inset + size / 2 - eyeSize / 2, inset + size / 2 - eyeSize / 2, eyeSize, eyeSize);
    }

    private void drawPair(Graphics g, int size, int eyeSize) {
        int y = inset + size / 2 - eyeSize / 2;
        g.fillOval(inset + eyeSize / 2, y, eyeSize, eyeSize);
        g.fillOval(size - 2 * inset - eyeSize, y, eyeSize, eyeSize);
    
    }

    private void drawSix(Graphics g, int size, int eyeSize) {
        drawFour(g, size, eyeSize);
        drawPair(g, size, eyeSize);
    }

    private void drawThree(Graphics g, int size, int eyeSize) {
        drawOne(g, size, eyeSize);
        drawTwo(g, size, eyeSize);
    }

    private void drawTwo(Graphics g, int size, int eyeSize) {
        g.fillOval(inset + eyeSize / 2, inset + eyeSize / 2, eyeSize, eyeSize);
        g.fillOval(size - 2 * inset - eyeSize, size - 2 * inset - eyeSize, eyeSize, eyeSize);
    }

    public int getValue() {
        return value;
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(diceColor);
        int size = getWidth() - inset * 2;
        g.fillRect(inset, inset, size, size);
        int eyeSize = size / 5;
        g.setColor(eyeColor);
        if (value == 1)
            drawOne(g, size, eyeSize);
        if (value == 2)
            drawTwo(g, size, eyeSize);
        if (value == 3)
            drawThree(g, size, eyeSize);
        if (value == 4)
            drawFour(g, size, eyeSize);
        if (value == 5)
            drawFive(g, size, eyeSize);
        if (value == 6)
            drawSix(g, size, eyeSize);   
    }

    public void rollDice() {
        value = rnd.nextInt(6) + 1;
        repaint();
    }

}
```


----------



## Elyt (2. Feb 2020)

Okaay vielen Dank! Habe es jetzt etwas vereinfacht fertiggestellt danke!


----------



## Elyt (2. Feb 2020)

*Hier für jeden der was ähnliches machen möchte:*
(Bei Fragen dazu einfach melden)


```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.util.Random;

public class Spieloberflaeche2 extends JFrame {
  // Anfang Attribute
  private JLabel jLabelSpielfeld = new JLabel();
  private JButton bWuerfeln = new JButton();
  private JLabel jLabelAugenzahl = new JLabel();
  // Ende Attribute
 
  public Spieloberflaeche2() {
    // Frame-Initialisierung
    super();
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    int frameWidth = 1412;
    int frameHeight = 1048;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    setTitle("Spieloberflaeche2");
    setResizable(false);
    Container cp = getContentPane();
    cp.setLayout(null);
    // Anfang Komponenten
    
    jLabelSpielfeld.setBounds(16, 8, 1049, 985);
    jLabelSpielfeld.setText("");
    jLabelSpielfeld.setIcon(new ImageIcon("Spielfeld.png"));
    cp.add(jLabelSpielfeld);
    bWuerfeln.setBounds(1192, 904, 193, 81);
    bWuerfeln.setText("Würfeln");
    bWuerfeln.setMargin(new Insets(2, 2, 2, 2));
    bWuerfeln.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        bWuerfeln_ActionPerformed(evt);
      }
    });
    bWuerfeln.setFont(new Font("Impact", Font.BOLD, 36));
    bWuerfeln.setBorder(BorderFactory.createEtchedBorder(0, Color.BLACK, Color.BLACK));
    bWuerfeln.setCursor(new Cursor(Cursor.HAND_CURSOR));
    bWuerfeln.setBorderPainted(true);
    cp.add(bWuerfeln);
    
    jLabelAugenzahl.setBounds(1160, 664, 225, 225);
    jLabelAugenzahl.setText("");
    cp.add(jLabelAugenzahl);
    cp.setBackground(new Color(0xC0C0C0));
    setVisible(true);
  }
 
  // Anfang Methoden
 
  public static void main(String[] args) {
    new Spieloberflaeche2();
  } // end of main
 
  public void bWuerfeln_ActionPerformed(ActionEvent evt) {
    Random wuerfel = new Random();
      int augenZahl;
    augenZahl = 1 + wuerfel.nextInt(6);
    
    if (augenZahl==1) {
      jLabelAugenzahl.setIcon(new ImageIcon("Wuerfel_1.png")); 
    }
    
    else if (augenZahl==2) {
      jLabelAugenzahl.setIcon(new ImageIcon("Wuerfel_2.png"));
    } // end of if
    
    else if (augenZahl==3) {
      jLabelAugenzahl.setIcon(new ImageIcon("Wuerfel_3.png"));
    } // end of if
    else if (augenZahl==4) {
      jLabelAugenzahl.setIcon(new ImageIcon("Wuerfel_4.png"));
    } // end of if
    
    else if (augenZahl==5) {   
      jLabelAugenzahl.setIcon(new ImageIcon("Wuerfel_5.png"));
    } // end of if   
    
    else if (augenZahl==6) {
      jLabelAugenzahl.setIcon(new ImageIcon("Wuerfel_6.png"));
    } // end of if
  // Ende Methoden
  }
    
    

    
} // end of bWuerfeln_ActionPerformed
```


----------



## mihe7 (2. Feb 2020)

Kleiner Verbesserungsvorschlag: 

```
private Random wuerfel = new Random();

    public void bWuerfeln_ActionPerformed(ActionEvent evt) {
        int augenZahl = 1 + wuerfel.nextInt(6);
        jLabelAugenzahl.setIcon(new ImageIcon("Wuerfel_" + augenZahl + ".png"));
    }
```


----------



## Elyt (5. Feb 2020)

Wow wirklich klasse! So ist der Code nicht mehr so lang.. Vielen Dank!


mihe7 hat gesagt.:


> Kleiner Verbesserungsvorschlag:
> 
> ```
> private Random wuerfel = new Random();
> ...


----------

