2014-02-08 2 views
1

작은 슬롯 머신을 만들려고합니다. 5 개의 JPanel을 사용 중입니다. JPanel 중 네 개는 사각형, 원형 ​​및 타원형과 같은 임의의 모양을 유지합니다. JPanel 네 개 모두가 사각형을 표시하면 다섯 번째 JPanelJackPot이 표시되고 다른 조합이 표시되면 다섯 번째 JPanel에 다시 말하십시오. 내가 겪고있는 문제는 사용자가이기거나 잃을 때 다섯 번째 JPanel 메시지를 표시하는 것입니다. 난 무작위로 JPanel s의 모양을 그릴 수 있지만 내가 가지고있는 문제는 특정 JPanel 페인트 방법을 그리는 만들고있다. 코드를 실행하면 임의의 모양이 모든 JPanel에 나타나지만 모양이 모두 5 개가 아닌 4 개의 JPanel에 표시되기를 원합니다.Java의 다른 JPanels에서 임의의 모양을 그리는 방법

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) 빈칸 한 줄의 공백은 소스 코드에서 항상 * 충분합니다. '{'또는'}'앞의 공백 행은 일반적으로 중복됩니다. –

+0

피어 검토를 위해 수정 된 고정 코드 서식 –

답변

4
  1. 귀하의 5 JPanel해야 하지JackPot 대상이 아니라 그 자체가 목적, 아마도 PayoutPanel 객체 또는 비슷한입니다. 핵심은 동작이 본질적으로 JackPot과 다르므로 해당 코드가 서로 달라야합니다.
  2. 귀하의 paintComponent 방법 중 밖으로 가져와야합니다. 리 페인트를 완전히 제어 할 수 없으므로 논리를 다시 칠하지 말고 명시 적 메서드 호출로 트리거해야합니다.
  3. 회전 구성 요소에 다른 구성 요소의 상태를 추출하여 모두 비교할 수있는 방법을 제공해야합니다.
+0

나는 당신이 말하는 것을보고 있습니다. 유일한 문제는 필자가 사용하는 Java 클래스가 메소드를 아직 다루지 않았기 때문에 페인트 메소드와 메인 클래스를 사용해야한다는 것입니다. – user3076906

+0

@ user3076906 : Java 클래스가 "아직 방법을 다루지 않았습니다"? 방법을 만들거나 오버라이드하는 법을 모른 채 스윙 GUI 프로그램을 만들라는 지시를 받았다는 말입니까? 진심으로? 나는 이것을 믿기가 매우 어렵다고 생각한다. –

+0

도움을 주셔서 감사합니다. 나는 내 친구에게 물었고 나에게 그걸 할 수있는 방법을 보여줬다. 그것은 최선의 방법은 아니지만 작동합니다. 나는 각 도형에 대해 다른 클래스를 작성하고 추가 패널에 대해 사용자에게 그들이 이겼는지 또는 잃어버린 것인지를 알려주었다. 그런 다음 난수 생성기를 사용하여 결과에 따라 모양을 그렸습니다. 나는 카운터를 사용하여 JPanel에 얼마나 많은 사각형이 있는지 확인했습니다. 그래서 4의 카운트를 얻었을 때 JPanel에 Jackpot이라고 말한 Win 클래스를 호출했습니다. – user3076906

관련 문제