0
我原本计划不依赖于java的窗口组件系统。但是,我被迫使用它,因为它具有双缓冲。所以这导致我目前的问题。有两个JPanel组件MainMenuDisplay和GameDisplay。无论何时您点击开始按钮,我都希望它摆脱mainMenuDisplay,并用新的游戏显示替换它。但是,每当我尝试这样做时,它都会删除mainMenuDisplay,即使代码显然正在运行,也不会添加gameDisplay。所以它只是让JFrame没有任何组件来运行它们的paintComponent方法。没有错误被抛出。那么为什么它不添加新的GameDisplay? P.S.请不要因为使用静态对象而对我大吼大叫。未添加到JFrame的组件
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);
}
当您调用add方法时,组件层次结构将失效。如果容器已经显示(因为它在这种情况下),你需要调用revalidate方法。 OTOH Google for CardLayout。它完全正是你需要做的。 – dic19 2014-09-29 03:23:02