繁体   English   中英

如何关闭框架却又打开新框架? (重访)

[英]How do I close a frame yet open a new frame? (revisited)

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

我的应用程序具有页面A,带有某些控件和特定按钮的JPanel ,并且当用户单击该按钮时,我希望页面A消失而页面B出现(页面B的控件取决于控件的选择)。 A页上的用户)。

之前曾有人问过这个问题 ,但没有令人满意的答案。 在ActionListener实现中,即jpanelForPageA类中的public void ActionPerformed(ActionEvent e) ,我可以轻松编写this.setVisible(false) ,但是如何将页面B设置为可见状态?

您可以删除面板a,然后添加面板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");

请看一下本教程,以获得更多想法。

出于某种原因,我永远无法让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);
}

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

我希望我能帮到:)

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM