如何关闭框架然后打开新框架? (重新)

时间:2010-05-31 20:33:10

标签: java awt

我正在尝试关闭一个框架但是打开一个新框架。

我的应用程序有第A页,JPanel有一些控件和一个特定按钮,当用户点击按钮时,我希望页面A消失,页面B出现(页面B有依赖的控件)用户在第A)页上做出的选择。

This has been asked before,但没有令人满意的答案。在ActionListener实现中,即来自我的jpanelForPageA类的public void ActionPerformed(ActionEvent e),我可以轻松地编写this.setVisible(false),但是如何将页面B设置为可见状态?

3 个答案:

答案 0 :(得分:1)

您可以删除面板a,然后添加面板b技巧。另一种方法是使用CardLayout

创建面板时,您可以将它们添加到使用CardLayout初始化的包含JPanel

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以获取更多想法。

答案 1 :(得分:0)

出于某种原因,我永远不会让setVisible()为我工作,让你做你正在描述的事情。相反,我这样做:

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

“frame”只是您想要放置面板的JFrame。如果setVisible()方法不起作用,请尝试使用此方法:)

对于你原来的问题,你所要做的就是(像aioobe所说):

panelB.setVisible(true);

((顺便说一句,发布一些代码可以帮助我找出你想要问的内容))

这只是猜测你想要做什么 - 我猜你的JPanels属于不同的类。然后,你需要这样做:

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);
}

您将页面类传递给面板,以便面板可以告诉页面类自行删除。 ((我不知道是否有更简单的方法,但这是我一直在做的事情))

我希望我帮助过。)

答案 2 :(得分:0)

您必须从框架中删除面板A,将面板B添加到框架中,并在框架(或包含面板)上调用invalidate。至少在Swing中,我不确定AWT,你可能需要重绘或重新验证而不是无效。

您也可以创建一个全新的JFrame并处理包含面板A的那个。