我想创建一个骰子滚动模拟器。这是我到目前为止所获得的。
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
和图形。
如果它尽可能简单,我将不胜感激,因为我在编程领域并不是很先进,而且最近才开始。如果您在给我答案之前尝试尽可能详细地解释,我将不胜感激,以便我有机会事先尝试自己解决。
谢谢!
答案 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)
如果我们现在忽略对骰子进行某种自定义绘制/动画,那么你的代码缺少一些功能元素:
ActionListener
对象以生成骰子卷的随机数并更新骰子UI组件ActionListener
添加到您的滚动按钮