JAVA BEGINNERS创建并掷骰子

时间:2015-04-23 09:09:49

标签: java eclipse graphics

我想创建一个骰子滚动模拟器。这是我到目前为止所获得的。

public class RollDice {
    private static class rollDice extends JPanel {
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            // custom draw code goes here
        }
    }

    public static void main(String[] args) { 
        JLabel message = new JLabel ("\nRoll the Die!\n", JLabel.CENTER); 
        message.setForeground(Color.BLACK); 
        message.setBackground(Color.WHITE); 
        message.setFont(new Font("Courier", Font.PLAIN, 25));
        message.setOpaque(true);

        JButton roll = new JButton("ROLL");

        JPanel content = new JPanel(); 
        content.setLayout(new BorderLayout()); 
        content.add(message, BorderLayout.NORTH);
        content.add(roll, BorderLayout.SOUTH);

        JFrame window = new JFrame("Roll Dice"); 
        window.setContentPane(content); 
        window.setSize(250,300); 
        window.setLocation(300,300); 
        window.setVisible(true);
    }
}

我已经得到了一个JFrame,JLabel和一个说滚动的按钮,简单的东西。

我想弄清楚的是如何在JPanel中创建两个骰子,以及如何在按钮" ROLL"单击,使用math.Random和图形。

如果它尽可能简单,我将不胜感激,因为我在编程领域并不是很先进,而且最近才开始。如果您在给我答案之前尝试尽可能详细地解释,我将不胜感激,以便我有机会事先尝试自己解决。

谢谢!

2 个答案:

答案 0 :(得分:1)

喜欢fd。说,你需要模具的组件。我们使用JLabel作为组件。他们可以安排如下:

+==============================+
|        Roll the Die!         |
|   +---------+  +---------+   |
|   |         |  |         |   |
|   |  dice1  |  |  dice2  |   |
|   |         |  |         |   |
|   +---------+  +---------+   |
| +--------------------------+ |
| |           ROLL           | |
| +--------------------------+ |
+==============================+

您可以在标签上设置ImageIcon(结帐:Java: how to add image to Jlabel?),这样就可以创建6个不同位置的骰子图像。按下按钮时,将生成一个随机数(1到6之间)(使用Math.random)。每个数字代表一个图像。根据此数字设置JLabel的图像。

为此,您需要ActionListener。像下面一样创建一个自定义ActionListener(注意我为一个模具做了):

public class RollDiceActionListener implements ActionListener {

    private JLabel dice;

    public RollDiceActionListener(JLabel dice) {
        this.dice = dice;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        int rnd = (int)(Math.random() * 6) + 1;

        switch (rnd) {
        case 1:
            dice.setIcon(new ImageIcon("/path/to/dice_1.png"));
            break;
        case 2:
            dice.setIcon(new ImageIcon("/path/to/dice_2.png"));
            break;
        case 3:
            dice.setIcon(new ImageIcon("/path/to/dice_3.png"));
            break;
        case 4:
            dice.setIcon(new ImageIcon("/path/to/dice_4.png"));
            break;
        case 5:
            dice.setIcon(new ImageIcon("/path/to/dice_5.png"));
            break;
        case 6:
            dice.setIcon(new ImageIcon("/path/to/dice_6.png"));
            break;
        }
    }
} 

每次按下按钮,都会调用ActionPerformed方法并随机更改每个JLabel的图标,模拟一骰子。

将自定义ActionListener添加到按钮:

roll.addActionListener(new RollDiceActionListener(die));

ActionListener需要修改代表骰子的Jlabel,所以不要忘记将它作为参数添加到你的监听器的构造函数中。

希望这会有所帮助。祝你好运!

答案 1 :(得分:0)

如果我们现在忽略对骰子进行某种自定义绘制/动画,那么你的代码缺少一些功能元素:

  • 为2个骰子实例化UI组件的对象
  • 将这些组件添加到您的布局中(您可能还需要在此处创建嵌套布局对象,具体取决于您对它们的定位方式)
  • 定义ActionListener对象以生成骰子卷的随机数并更新骰子UI组件
  • ActionListener添加到您的滚动按钮