用java在Swing的窗体中安排一个画布,在画布上绘制一个色子,随机产生色子的值. 每次点击画布,随机投掷更换色子的值.
时间: 2024-01-21 21:19:52 浏览: 74
RandomColors:使用 Java 的随机颜色
好的,让我们来实现这个功能。
首先,我们需要创建一个继承自JPanel的类来作为画布。在这个类中,我们可以覆盖paintComponent方法来绘制色子。
在绘制色子之前,我们需要定义色子的点数和大小。我们可以使用以下常量来定义:
```java
private static final int NUM_DOTS = 6; // 色子的点数
private static final int DOT_SIZE = 20; // 色子点的大小
```
接下来,我们需要在paintComponent方法中绘制色子。我们可以使用Java的随机数生成器来生成一个1到6之间的随机数,然后根据这个数字来绘制相应数量的点。
```java
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
int value = (int) (Math.random() * NUM_DOTS) + 1;
int width = getWidth();
int height = getHeight();
int x = (width - DOT_SIZE) / 2;
int y = (height - DOT_SIZE) / 2;
g.setColor(Color.WHITE);
g.fillRect(0, 0, width, height);
g.setColor(Color.BLACK);
g.drawRect(0, 0, width - 1, height - 1);
drawDot(g, x + DOT_SIZE / 4, y + DOT_SIZE / 4);
drawDot(g, x + 3 * DOT_SIZE / 4, y + 3 * DOT_SIZE / 4);
if (value % 2 == 1) {
drawDot(g, x + DOT_SIZE / 2, y + DOT_SIZE / 2);
}
if (value > 1) {
drawDot(g, x + DOT_SIZE / 4, y + 3 * DOT_SIZE / 4);
drawDot(g, x + 3 * DOT_SIZE / 4, y + DOT_SIZE / 4);
}
if (value > 3) {
drawDot(g, x + 3 * DOT_SIZE / 4, y + 3 * DOT_SIZE / 4);
drawDot(g, x + DOT_SIZE / 4, y + DOT_SIZE / 4);
}
}
private void drawDot(Graphics g, int x, int y) {
g.fillOval(x, y, DOT_SIZE, DOT_SIZE);
}
```
在上述代码中,我们首先生成一个随机数value,用于决定色子的点数。然后计算出色子的坐标和大小。接下来,我们绘制一个白色的矩形来清空画布,然后绘制一个黑色的矩形来表示色子的边框。
最后,我们根据随机数value来绘制相应数量的点。如果value是奇数,我们在中心位置绘制一个点。如果value大于1,我们在对角线上的两个位置绘制点。如果value大于3,我们在剩余的两个位置绘制点。
最后,我们可以在主类中创建这个画布,并将它添加到一个JFrame中。我们可以为这个JFrame添加一个MouseListener,当用户单击画布时,我们可以调用repaint方法来重新绘制一个新的色子。
```java
public class DicePanel extends JPanel implements MouseListener {
private static final int NUM_DOTS = 6;
private static final int DOT_SIZE = 20;
public DicePanel() {
setPreferredSize(new Dimension(100, 100));
addMouseListener(this);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
int value = (int) (Math.random() * NUM_DOTS) + 1;
int width = getWidth();
int height = getHeight();
int x = (width - DOT_SIZE) / 2;
int y = (height - DOT_SIZE) / 2;
g.setColor(Color.WHITE);
g.fillRect(0, 0, width, height);
g.setColor(Color.BLACK);
g.drawRect(0, 0, width - 1, height - 1);
drawDot(g, x + DOT_SIZE / 4, y + DOT_SIZE / 4);
drawDot(g, x + 3 * DOT_SIZE / 4, y + 3 * DOT_SIZE / 4);
if (value % 2 == 1) {
drawDot(g, x + DOT_SIZE / 2, y + DOT_SIZE / 2);
}
if (value > 1) {
drawDot(g, x + DOT_SIZE / 4, y + 3 * DOT_SIZE / 4);
drawDot(g, x + 3 * DOT_SIZE / 4, y + DOT_SIZE / 4);
}
if (value > 3) {
drawDot(g, x + 3 * DOT_SIZE / 4, y + 3 * DOT_SIZE / 4);
drawDot(g, x + DOT_SIZE / 4, y + DOT_SIZE / 4);
}
}
private void drawDot(Graphics g, int x, int y) {
g.fillOval(x, y, DOT_SIZE, DOT_SIZE);
}
@Override
public void mouseClicked(MouseEvent e) {
repaint();
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
}
public class DiceFrame extends JFrame {
public DiceFrame() {
setTitle("Dice Roller");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
DicePanel panel = new DicePanel();
add(panel);
pack();
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
new DiceFrame();
}
}
```
现在我们已经完成了这个程序。运行它,单击画布可以随机生成一个新的色子。
阅读全文