添加的JPanel不会显示Java

添加的JPanel不会显示Java,java,canvas,jpanel,Java,Canvas,Jpanel,我一直在试图弄清楚为什么gameControlArt(它是一个JPanel对象)没有出现在gamePanel上,而gamePanel也是一个JPanel对象 我试图创建的内容:用户在运行程序时看到mainMenuArt(一个JPanel对象,其中包含一个JLabel图形)添加到gamePanel上。当用户按键时,mainMenuArt将被删除。游戏控制艺术出现了。用户再次按键,gameControlArt被移除,画布对象被添加到gamePanel对象 结果是:主菜单出现在游戏面板上,这很好。问题

我一直在试图弄清楚为什么gameControlArt(它是一个JPanel对象)没有出现在gamePanel上,而gamePanel也是一个JPanel对象

我试图创建的内容:用户在运行程序时看到mainMenuArt(一个JPanel对象,其中包含一个JLabel图形)添加到gamePanel上。当用户按键时,mainMenuArt将被删除。游戏控制艺术出现了。用户再次按键,gameControlArt被移除,画布对象被添加到gamePanel对象

结果是:主菜单出现在游戏面板上,这很好。问题在于移除mainMenuArt后,gameControlArt(另一个JPanel对象,它有一个包含艺术品的JLabel对象)不会添加到gamePanel(JPanel对象)。相反,当JPanel对象没有添加任何组件时,它会显示默认的灰色区域。当用户按下一个键时,画布显示在游戏面板上

总之,问题是:gameControlArt根本不像它在游戏面板上那样出现

我尝试了updateUI()、revalidate和repaint(),但由于一些奇怪的原因,这些方法调用不起作用

public class GameWindow extends JFrame implements KeyListener{
gamePanel = (JPanel) getContentPane();

gamePanel.remove(mainMenuArt);
gameControlArt = new GameControlArt();
gamePanel.add(gameControlArt);
GameWindow.getGamePanel().revalidate();
}

public class extends Canvas implements KeyListener
{
GameWindow.getGamePanel().add(this);
GameWindow.getGamePanel().revalidate();
}

尝试
getContentPane.add()
而不是add


我不确定它在这种情况下是否有效,因为我不知道您是如何定义gamePanel类的,但我希望是这样。

我在一个名为GameWindow的类中定义了gamePanel对象,该类扩展了JFrame。因此,gamePanel的定义方式是:gamePanel=(JPanel)getContentPane();我似乎想出了一个解决办法。我需要调整JFrame对象相对于图像的宽度和高度的大小。谢谢你的帮助,佩吉+1谢谢你的帮助!