2013-07-09 41 views
0

我正在寫一個簡單的Java遊戲,我面臨這個問題:搖擺:啓動第二的JPanel,當第一的JPanel點擊

我不同的佈局在不同JPanels(1個JPanel中的歡迎頁面,在這裏我必須按「開始遊戲」,另一個與實際工作functionallity)

我從一個JFrame

import javax.swing.JFrame; 

public class RType extends JFrame { 

    public RType() { 

     add(new Welcome());//first panel 
     add(new Board());//panel with the game 

     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setSize(100, 100); 
     setResizable(false); 
     setVisible(true); 

    } 

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

obviuosly開始遊戲,這將啓動之後的第一第二面板,和我不能見第一個。 我已經嘗試了一些東西,嘗試調用第二面板在main方法,當第一板被點擊的方式:

RType rt=new RType(); 
rt.add(new Board()); //in this case add(new Board()); is removed from constructor 

但它什麼都不做。 我該如何解決它?

+1

你必須使用其他佈局例如'CardLayout' – nachokk

+0

@nachokk謝謝 – IAM

回答

4

正如@nachokk所說,您應該使用CardLayout來代替。它可以讓你在瀏覽器中執行諸如選項卡之類的操作,但是如果你不想讓遊戲中的選項卡顯示出來,就不需要這些選項卡。你首先看到你的「歡迎卡」,然後當用戶點擊你時,切換到Board「卡」。

enter image description here

+0

我是減慢回答xD – nachokk

+0

@nachokk :(FWIW,我給了你一個upv OTE。 –

+0

我也希望你可以接受 – nachokk

1

默認情況下,兩個面板都將填滿整個Frame的區域。要解決這個問題,您需要使用其他佈局,例如GridLayout來構建面板佔據Frame區域的區域。

您也可以不使用佈局來硬編碼您希望面板適合您的框架的像素值。

編輯:根據你要做什麼,CardLayout可能是你想要用於你的框架的佈局。

3

我不建議直接添加到JFrame組件,而不是使用其他容器作爲JPanel。 JFrame的默認佈局是BorderLayout,當你添加的方式添加它總是放在中心。

做這樣的事情:歡迎的第一面板上

JFrame frame = new JFrame(); 
JPanel mainPanel = new JPanel(); 
mainPanel.setLayout(new CardLayout()); 
mainPanel.add(new Welcome(), "Welcome"); 
mainPanel.add(new Board(),"Board"); 
frame.add(mainPanel); 

這裏是一個教程How to use CardLayout

2

添加一個按鈕,並應用的actionPerformed像

JButton myButton = new JButton("Add Component "); 
    myButton.addActionListener(new ActionListener() { 

     public void actionPerformed(ActionEvent e) { 
      frame.remove(welcome); 
      frame.add(Board, BorderLayout.CENTER); 
      frame.revalidate(); 
      frame.repaint(); 
      } 
    }); 
相關問題