2013-05-30 84 views
0

我一直在想为什么gameControlArt(这是一个JPanel对象)不会出现在也是JPanel对象的gamePanel上。添加JPanel不显示Java

我正在创建的东西:用户在运行该程序时看到mainMenuArt(具有包含艺术作品的JLabel的JPanel对象)添加到gamePanel。当用户按下某个键时,mainMenuArt将被删除。 gameControlArt出现。用户再次按下一个键,gameControlArt被移除,画布对象被添加到gamePanel对象。

取而代之的是:mainMenuArt出现在gamePanel上,这很好。问题出在移除mainMenuArt之后,gameControlArt(这是另一个JPanel对象,它具有包含插图的JLabel对象)不会被添加到gamePanel(它是一个JPanel对象)。相反,它会在JPanel对象没有添加组件时显示默认的灰色区域。当用户按下某个键时,画布将显示在gamePanel上。

所以总结一下问题是:gameControlArt根本不会显示在游戏面板上。

我尝试updateUI(),重新验证和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(); 
} 

回答

1

尝试getContentPane.add()而不是添加。

我不确定它是否适用于这种情况,因为我不知道你是如何定义gamePanel类的,但我希望它可以。

+0

我在扩展JFrame的名为GameWindow的类中定义了gamePanel对象。所以gamePanel的定义方式如下:gamePanel =(JPanel)getContentPane(); – Nicholas

+0

我试过了,但问题依然存在。 – Nicholas

+1

我似乎想出了一个解决方案。我需要调整相对于图像宽度和高度的JFrame对象的大小。感谢您的帮助,Peggy +1帮助! – Nicholas