我正在尝试制作一个老版本的老虎机。我正在使用五个JPanel
。 JPanel
中的四个将保持随机形状,如方形,圆形和椭圆形。如果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);
}
}
答案 0 :(得分:4)
JPanel
不应该是JackPot
个对象,而是它自己的对象,可能是PayoutPanel
个对象或类似对象。关键是它的行为本质上与JackPot
的行为不同,所以它的代码必须不同才能匹配。paintComponent
方法的程序逻辑 out 。逻辑不应该由重绘来触发,而是由显式方法调用触发,因为你无法完全控制重绘。