在框架中交换面板

时间:2010-12-28 20:05:53

标签: java panel frame

所以我有一个框架和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并且没有找到任何帮助。

如果有人知道更好的方法,或者遇到了这个问题。请分享你的知识,这个让我难过。

4 个答案:

答案 0 :(得分:1)

您应该使用CardLayout进行此类操作,而不是删除和添加面板。

答案 1 :(得分:1)

持有面板的容器需要无效,验证和重新绘制(全部在EDT上)。例如,如果框架是持有者,那么

frame.invalidate();
frame.validate();
frame.repaint();

这当然是在添加目标面板之后。

答案 2 :(得分:0)

现在,我真的不记得自从我遇到同样的问题以来,你有没有尝试过使用:

this.setVisible(true);

这可能有效

答案 3 :(得分:0)

迈克尔指出,CardLayout是一个很好的方式。

您要查找的具体功能是Container.validate()。它将“导致容器再次布置其子组件。应该在修改此容器的子组件后调用...在显示容器后。”