2014-02-17 113 views
1

我即將接近我的第一個遊戲的最終開發階段,但遇到了問題。我構建了4個不同的級別,並允許用戶從Card Layout系統中的中央JPanel中選擇想要玩的級別。我的問題是,一旦完成一個級別,我不能切換顯示的JPanel以開始下一個級別,因爲我不知道如何訪問原始JPanel作爲其他面板的驅動程序。任何幫助表示讚賞,並且我的代碼被張貼在下面。更改框架並將注意力集中在卡片佈局

import java.awt.BorderLayout; 
import java.awt.CardLayout; 
import java.awt.Color; 
import java.awt.Container; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.Font; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 

    public class MainFrame extends JFrame implements ActionListener 
     { 
     JPanel bodyPanel; 
     JPanel panel1,panel2,panel3,panel4,panel5; 
     JButton button1,button2,button3,button4,button5; 
     JLabel title; 
     Container con; 
     CardLayout clayout; 


     public MainFrame() 
    { 
    clayout=new CardLayout(); 
    bodyPanel=new JPanel(clayout); 

    button1=new JButton("Level 1"); 
    button3= new JButton("Level 2"); 
    button4 = new JButton("Level 3"); 
    button2=new JButton("Exit"); 
    button5 = new JButton("Level 4"); 


    button1.addActionListener(this); 
    button2.addActionListener(this); 
    button3.addActionListener(this); 
    button4.addActionListener(this); 
    button5.addActionListener(this); 


    panel1=new JPanel(); 
     title = new JLabel("Space Adventure"); 
     panel1.add(title); 
     title.setFont(new Font("Serif", Font.PLAIN, 110)); 
     panel1.add(button1); 
     panel1.add(button3); 
     panel1.add(button4); 
     panel1.add(button5); 
     panel1.add(button2); 



    panel1.setBackground(Color.pink); 
    panel2=new PrizePanel(); 
    panel2.setBackground(Color.gray); 



    bodyPanel.add(panel1,"one");  
    bodyPanel.add(panel2,"two");  


    setLayout(new BorderLayout()); 
    setSize(800,400); 
    add(bodyPanel,BorderLayout.CENTER); 
    bodyPanel.setBounds(0,100, 600, 500); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setVisible(true); 

} 

     public static void main(String args[]) 
     { 
      new MainFrame(); 
     } 

     public void actionPerformed(ActionEvent e) { 

      if(e.getSource()==button1) 
      { 
      clayout.show(bodyPanel, "two"); 
       panel2.requestFocusInWindow(); 
      }else if(e.getSource()==button3) 
      { 
      panel3=new PrizePanel2(); 
      panel3.setBackground(Color.gray); 
      bodyPanel.add(panel3,"three"); 
      clayout.show(bodyPanel, "three"); 
      panel3.requestFocusInWindow(); 
      } 
      else if(e.getSource()==button4) 
      { 
      panel4=new PrizePanel3(); 
      panel4.setBackground(Color.gray); 
      bodyPanel.add(panel4,"four"); 
      clayout.show(bodyPanel, "four"); 
      panel4.requestFocusInWindow(); 
      }else if(e.getSource()==button5) 
      { 
      panel5=new PrizePanel4(); 
      panel5.setBackground(Color.gray); 
      bodyPanel.add(panel5,"five"); 
      clayout.show(bodyPanel, "five"); 
      panel5.requestFocusInWindow(); 
      } 


      else if(e.getSource()==button2) 
      { 
      System.exit(0); 
      } 

     } 

} 

回答

0

感謝大家花時間仔細查看。我最終創建了一個靜態函數來交換面板,以便它可以從任何類中調用。

public static void swap(int x){ 
    switch(x){ 
    case 1: 
     clayout.show(bodyPanel, "two"); 
      panel2.requestFocusInWindow(); 
      break; 
     case 2: 
     clayout.show(bodyPanel, "three"); 
     panel3.requestFocusInWindow(); 
     break; 
     case 3: 
     panel3 = null; 
     clayout.show(bodyPanel, "four"); 
     panel4.requestFocusInWindow(); 
     break; 
     case 4: 
     panel4=null; 
     clayout.show(bodyPanel, "five"); 
     panel5.requestFocusInWindow(); 
     break; 
    } 
    } 
1

開始加入所有的「遊戲」面板的bodyPanel在開始,然後簡單地使用clayout.show在它們之間切換。如果需要,請在切換到「遊戲」面板之前提供reset方法。

使用將傳遞給每個「遊戲」面板的回調接口。當他們完成他們的級別時,它會調用這個接口,告訴實現該級別已完成,然後實現將決定如何切換下一個面板。

+0

我一直在嘗試像你說的那樣實現一個回調,但我無法讓它工作。你能發佈代碼嗎?謝謝 – user3050810

相關問題