2014-02-08 92 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