我正在尝试关闭一个框架但是打开一个新框架。
我的应用程序有第A页,JPanel
有一些控件和一个特定按钮,当用户点击按钮时,我希望页面A消失,页面B出现(页面B有依赖的控件)用户在第A)页上做出的选择。
This has been asked before,但没有令人满意的答案。在ActionListener实现中,即来自我的jpanelForPageA类的public void ActionPerformed(ActionEvent e)
,我可以轻松地编写this.setVisible(false)
,但是如何将页面B设置为可见状态?
答案 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的那个。