2010-05-31 41 views
0

我想關閉一個框架,但打開一個新的框架。如何關閉一個框架,然後打開一個新框架? (重新訪問)

我的申請頁面A,一個JPanel一些控件和一個特定的按鈕,當用戶點擊該按鈕,我想第一個消失,網頁B出現(頁面B有依賴於選擇控件由用戶在頁面A上製作)。

This has been asked before,但沒有滿意的答案。在ActionListener實現中,即我的jpanelForPageA類中的public void ActionPerformed(ActionEvent e),我可以舒適地編寫this.setVisible(false),但是如何將頁面B設置爲可見狀態?

+1

'jpanelForPageB.setVisible(真)'的人嗎? – aioobe 2010-05-31 20:38:15

回答

1

你可以做去除面板,然後小組b技巧的加入。另一種是使用CardLayout

當您創建面板,將它們添加到一個包含JPanel你初始化一個CardLayout

JPanel container = new JPanel(new CardLayout()); 
containter.add(getPanelA(), "PANEL_A"); 
containter.add(getPanelB(), "PANEL_B"); 

然後,在你actionPerformed,當你想顯示panelB,你這樣做:

CardLayout cl = (CardLayout) container.getLayout(); 
cl.show("PANEL_B"); 

查看this tutorial瞭解更多想法。

+0

哦,真有趣。該方法看起來比我爲這個問題概述的方法更有效率。 +1:D – exodrifter 2010-06-01 02:04:25

0

出於某種原因,我永遠無法讓setVisible()爲我工作來完成您所描述的內容。相反,怎麼辦這樣的:

frame.remove(panelA); 
frame.add(panelB); 

「框架」只是JFrame中要放置面板中試試這個,如果調用setVisible()方法不起作用:)

要你原來的問題。 ,所有你需要做的就是(如aioobe說):

panelB.setVisible(true); 

((順便說一句,張貼一些代碼會幫我找出你要問)什麼)

這是隻是猜測喲你正試圖做 - 我猜你的JPanel是在不同的班級。然後,您需要這樣做:

class pages extends JFrame implements ActionListener 
{ 
    public pages() 
    { 
     panelA a = new panelA(this) 
    } 

    changeToA(panelB b) 
    { 
     remove(panelB); 
     add(new panelA(this)); 
    }   

    changeToB(panelA a) 
    { 
     remove(panelA); 
     add(new panelB(this)); 
    } 
} 

class panelA extends JPanel implements ActionListener 
{ 
    pages p; 
    public panelA(pages p) 
    { 
     this.p = p 
    } 
    // all that actionlistener code stuff 
     p.changeToB(this); 
} 

class panelB extends JPanel implements ActionListener 
{ 
    pages p; 
    public panelB(pages p) 
    { 
     this.p = p 
    } 
    // all that actionlistener code stuff 
     p.changeToA(this); 
} 

您將頁面類傳遞到面板,以便面板可以告訴頁面類自行刪除。 ((我不知道是否有更簡單的方法,但是這是我做的所有的時間))

我希望我幫助:)

0

您必須從框架中刪除面板A,將面板B添加到框架,並在框架(或包含面板)上調用invalidate。至少在Swing中,我不確定AWT,那麼您可能需要重繪或重新驗證而不是無效。

你也可以只創建一個全新的JFrame和處置含面板A.

相關問題