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