Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何关闭一个框架并打开一个新框架?(再次访问)_Java_Awt - Fatal编程技术网

Java 如何关闭一个框架并打开一个新框架?(再次访问)

Java 如何关闭一个框架并打开一个新框架?(再次访问),java,awt,Java,Awt,我试图关闭一个框架,但打开一个新的框架 我的应用程序有A页,AJPanel,带有一些控件和一个特定的按钮,当用户单击按钮时,我希望A页消失,B页出现(B页有一些控件,这些控件取决于用户在A页上所做的选择) ,但没有令人满意的答案。在ActionListener实现中,即从我的JPanelFormageA类中编写的public void ActionPerformed(ActionEvent e),我可以轻松地编写这个.setVisible(false),但是我如何将页面B设置为可见状态呢?出于某

我试图关闭一个框架,但打开一个新的框架

我的应用程序有A页,A
JPanel
,带有一些控件和一个特定的按钮,当用户单击按钮时,我希望A页消失,B页出现(B页有一些控件,这些控件取决于用户在A页上所做的选择)


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

出于某种原因,我永远无法让setVisible()为我工作,以完成您所描述的任务。相反,我这样做:

frame.remove(panelA);
frame.add(panelB);
“frame”就是您要将面板放入的JFrame。如果setVisible()方法不起作用,请尝试以下操作:)

对于你最初的问题,你所要做的就是(就像艾奥比所说的):

((顺便说一句,发布你的一些代码可以帮助我了解你想问什么))

这只是一个猜测,你想做什么——我猜你的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);
}
将pages类传递给面板,以便面板可以告诉pages类删除它们自己。 ((我不知道是否有更简单的方法,但我一直都是这样做的))


我希望我能帮上忙:)

你可以先移除面板a,然后添加面板b。另一种方法是使用一个

创建面板时,将其添加到包含的
JPanel
,并使用以下命令初始化:

然后,在执行的
操作中
,当您想显示
面板B
时,您可以执行以下操作:

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

查看更多想法。

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


您还可以创建一个全新的JFrame,然后处理包含面板a的JFrame。

jpanelFormageb.setVisible(true)
?哦,太有趣了。这种方法看起来比我为这个问题概述的方法要有效得多+1:D
JPanel container = new JPanel(new CardLayout());
containter.add(getPanelA(), "PANEL_A"); 
containter.add(getPanelB(), "PANEL_B"); 
CardLayout cl = (CardLayout) container.getLayout();
cl.show("PANEL_B");