2014-02-08 93 views
1

我试图制作一个小型版的老虎机。我正在使用五个JPanel s。 JPanel中的四个将保持像正方形,圆形和椭圆形的随机形状。如果所有四个JPanel都显示正方形,则第五个JPanel应该显示JackPot,如果显示任何其他组合,则第五个JPanel应该再试一次。我遇到的问题是当用户赢或输时第五个JPanel显示一条消息。我能够在JPanel上随机绘制形状,但是我遇到的问题是使绘制方法在特定的JPanel中绘制。当我运行代码时,每个JPanel上都会出现一个随机形状,但我只希望这些形状出现在四个JPanel之间,而不是全部五个。如何在Java中的不同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

1)对代码块使用一致的逻辑缩进。代码的缩进旨在帮助人们理解程序流程。 2)源代码中的单个空白行是* always *就足够了。 '{'之后或'}'之前的空行通常也是多余的。 –

+0

固定代码格式化,编辑为同行审查 –

回答

4
  1. 你5 JPanel应该JackPot对象,而是它自己的对象,也许是PayoutPanel对象或类似的东西。关键是它的行为与JackPot的行为本质上是不同的,所以它的代码必须不同才能匹配。
  2. 你需要让你的程序逻辑你的paintComponent方法。逻辑不应该由repaint触发,而应该由明确的方法调用触发,因为您无法完全控制重绘。
  3. 你应该给你的纺纱组件一个方法来允许其他物体提取它们的状态,以便它们都可以进行比较。
+0

我明白你在说什么。唯一的问题是我所在的Java类尚未覆盖方法,所以我不得不使用paint方法和main类。 – user3076906

+0

@ user3076906:你的Java类“尚未覆盖方法”?你是否说你被指示创建Swing GUI程序而不知道如何创建或重写一个方法?真的吗?我觉得这很难相信。 –

+0

感谢您的帮助。我问我的朋友,他给了我一个办法。这不是最好的方式,但它的工作原理。我最终为每个形状创建了一个不同的类,并为其他面板告诉用户他们是赢了还是输了。然后我使用随机生成器并根据结果画出一个形状。我使用了一个计数器来检查JPanel上有多少个正方形,所以当我计数4时,我打电话给我的Win类,其中有JPanel说Jackpot。 – user3076906