如何在Java中的不同JPanel中绘制随机形状

时间:2014-02-08 03:31:57

标签: java swing random jpanel

我正在尝试制作一个老版本的老虎机。我正在使用五个JPanelJPanel中的四个将保持随机形状,如方形,圆形和椭圆形。如果JPanel中的所有四个都显示正方形,则第五个JPanel应显示JackPot,如果显示任何其他组合,则第五个JPanel应该再次尝试。我遇到的问题是让第五个JPanel在用户赢或输时显示一条消息。我可以在JPanel s上随机绘制形状,但我遇到的问题是使绘制方法在特定的JPanel中绘制。当我运行代码时,每个JPanel都会出现一个随机形状,但我只希望形状显示在四个JPanel上,而不是全部五个。

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

public class JackPot extends JPanel {

    public JackPot(Color backColor) {
        setBackground(backColor);
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);

        Random gen = new Random();
        int a = gen.nextInt(10);

        if (a <= 3) {
              g.drawOval(20,20,25,25);
        } else if (a > 3 && a <= 6) {
            g.drawRect(20,20,25,10);
        } else {
            g.drawOval(20,20,20,10);
        }
    }

    public static void main(String[] args) {

        JFrame GUI = new JFrame();
        GUI.setTitle("JackPot");
        GUI.setSize(500, 400);

        Container pane = GUI.getContentPane();
        pane.setLayout(new GridLayout(5, 1));
        JackPot panel = new JackPot(Color.red);
        JackPot panel2 = new JackPot(Color.white);
        JackPot panel3 = new JackPot(Color.yellow);
        JackPot panel4 = new JackPot(Color.green);
        JackPot panel5 = new JackPot(Color.pink);

        pane.add(panel);
        pane.add(panel2);
        pane.add(panel3);
        pane.add(panel4);
        pane.add(panel5);

        GUI.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        GUI.setVisible(true);
    }
}

1 个答案:

答案 0 :(得分:4)

  1. 您的第5个JPanel 应该是JackPot个对象,而是它自己的对象,可能是PayoutPanel个对象或类似对象。关键是它的行为本质上与JackPot的行为不同,所以它的代码必须不同才能匹配。
  2. 您需要获取paintComponent方法的程序逻辑 out 。逻辑不应该由重绘来触发,而是由显式方法调用触发,因为你无法完全控制重绘。
  3. 您应该为旋转组件提供一种方法,允许其他对象提取其状态,以便可以对它们进行比较。