2010-05-31 42 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.

相关问题