所以我有一个框架和2个面板,最初面板A显示在框架中。我已经设置好了,所以当在面板中单击一个按钮时,它会回调该帧并运行这段代码。 (“splash”是最初显示的面板,“game”是我想在按下按钮后显示的面板)
public void startGame()
{
System.out.println("starting game");
remove(splash);
gameThread = new Thread(game, "game thread");
gameThread.start();
add(game);
/*
this.setSize(0,0);
this.setSize(450, 450);
*/
}
无论如何这似乎删除了一个面板,但是在你调整窗口大小之前不会显示第二个面板。评论部分似乎解决了这个问题,但我不能帮助认为有更好的方法来做到这一点。我已经浏览了API并且没有找到任何帮助。
如果有人知道更好的方法,或者遇到了这个问题。请分享你的知识,这个让我难过。
答案 0 :(得分:1)
您应该使用CardLayout进行此类操作,而不是删除和添加面板。
答案 1 :(得分:1)
持有面板的容器需要无效,验证和重新绘制(全部在EDT上)。例如,如果框架是持有者,那么
frame.invalidate();
frame.validate();
frame.repaint();
这当然是在添加目标面板之后。
答案 2 :(得分:0)
现在,我真的不记得自从我遇到同样的问题以来,你有没有尝试过使用:
this.setVisible(true);
这可能有效
答案 3 :(得分:0)
迈克尔指出,CardLayout是一个很好的方式。
您要查找的具体功能是Container.validate()。它将“导致容器再次布置其子组件。应该在修改此容器的子组件后调用...在显示容器后。”