组件未添加到JFrame

时间:2014-09-29 03:16:03

标签: java swing jframe jcomponent

我原计划不依赖于java的窗口组件系统。但是,我被迫使用它,因为它有双重缓冲。所以这导致了我目前的问题。有两个JPanel组件MainMenuDisplay和GameDisplay。每当您单击开始按钮时,我希望它摆脱mainMenuDisplay并将其替换为新的gameDisplay。然而,每当我尝试这样做时,它会删除mainMenuDisplay,并且即使代码显然正在运行,也不会添加gameDisplay。所以它只是让JFrame没有任何组件来运行它们的paintComponent方法。没有错误被抛出。那么为什么不添加新的GameDisplay呢? 附:请不要因使用静态物体而对我大喊大叫。

Start.WINDOW.changeCurrentDisplay(new GameDisplay());
//Creates a new GameDisplay and passes it the JFrame
//This is inside MainMenuDisplay

//This is part of the JFrame class
Display mainMenuDisplay;
Display gameDisplay;
//Display class extends JPanel

public WindowManager() {
    super("Mountours - And - Men");

    setSize(settings.windowHeight, settings.windowWidth);
    setLocationRelativeTo(null);

    setResizable(settings.resizable);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBackground(Color.WHITE);

    currentDisplay = new MainMenuDisplay();
    addKeyListener(currentDisplay.input);
    addMouseListener(currentDisplay.input);
    add(currentDisplay);


    setVisible(true);
}

public void changeCurrentDisplay(Display display) {
    removeAll();//Removes the MainMenuDisplay
    mainMenuDisplay = display;
    add(display);//Attempts to add component to JFrame, but doesn't, no errors either
    addKeyListener(display.input);
    addMouseListener(display.input);
}

1 个答案:

答案 0 :(得分:0)

相反,您可以使用可见性概念来实现问题的解决方案。 只需在另一个上方添加两个面板即可 设置Visibility为true为true而false为其他为... 根据用途改变可见性

在开始按钮onclick事件监听器..编写以下代码..它就像一个魅力

GameDisplay.setVisible(true);
MainMenuDisplay.setVisible(false);