2012-06-11 115 views
0

我正在爲我的應用程序構建簡單的GUI。我有幾個JPanels。我想顯示它們取決於通過單擊JButton執行的操作。我如何禁用一個JPanel並啓用另一個JPanel?單擊按鈕後更改JPanel

幾個細節。我有一個JFrame的課程,我正在創建gui。我在哪裏有按鈕和一些文字。點擊其中一個按鈕應該更改視圖在此JFrame的

我的按鈕定義

JButton btnStart = new JButton("Start"); 
    btnStart.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 

     } 
    }); 
    btnStart.setBounds(10, 11, 110, 23); 
    contentPane.add(btnStart); 

//編輯

我發現這個問題。按鈕處於靜態方式

回答

3

就這麼簡單:

jframe.setContentPane(your_new_panel); 
jframe.invalidate(); 
jframe.validate(); 
+0

我怎樣才能得到jframe?這是內部類,因此無法訪問它 – Fixus

+0

如果您正在擴展JFrame,則您已有權訪問方法setContentPane。 –

+0

你的代碼結構如何?你是否繼承了JFrame? – 2012-06-11 16:45:50

4
  1. 您可能想要使用CardLayout
  2. 或者你可以簡單的刪除oldpanel並添加新的面板:

contentPane.remove(oldPanel); 
contentPane.add(newPanel); 
+0

同樣的問題上面。如何從內部類獲取contentPane? – Fixus

+1

@Fixus:你不需要獲取contentPane。你只需要引用任何正在處理cardlayout-using組件的類,然後調用你給班上的任何公共方法,以便交換卡片。對於Suraj:您的CardLayout rec比交換組件要好,因爲CardLayout會考慮組件大小。你也不必擔心調用'revalidate()'和'repaint()'(你似乎忘了你的答案)。 –

+0

如果它的JFrame,你可以使用contentPane:「frame.getContentPane()」 –