我正在研究基于主JFrame的图形化棋盘游戏程序。游戏棋盘本身来自JPanel。通过JFrame窗口临时显示JPanel
我希望能够在有人获胜时在整个窗口上显示“胜利屏幕”。我想我可以从一开始就能够成功展示的“欢迎屏幕”扩展这个想法。当此代码运行时,出现欢迎屏幕,保持2秒钟,然后消失,游戏板出现并准备好玩。我们希望,这些基本的零件会如何,我把它设置了足够的信息:
public class MyGame{
public static Board b; //Board extends JPanel
public static Window gameWindow; //Window extends JFrame
...
public static void main(String args[]) throws IOException{
...
gameWindow = new Window("My Game");
//DisplayScreen extends JPanel
DisplayScreen intro = new DisplayScreen("welcomeScreen.png");
gameWindow.setSize(960, 570);
gameWindow.add(intro);
gameWindow.setVisible(true);
wait(2); //just a function I wrote
...
b = new Board("board.png");
...
gameWindow.remove(intro);
gameWindow.add(b);
gameWindow.repaint();
gameWindow.setVisible(true);
...
}
...
}
诚然,花了大量的试验和错误,以得到这个工作。然而,对于我来说,我无法想象如何在比赛稍后的某个时候临时提出胜利的画面。我以为我可以通过中央MyGame
课程中的一个功能来完成此任务(我曾在Window
课程和其他地方尝试过,但没有成功)。例如:
public static void VictoryScreen(){
DisplayScreen victoryScreen = new DisplayScreen("victoryScreen.jpg");
victoryScreen.setVisible(true);
gameWindow.add(victoryScreen);
}
不幸的是,这不显示任何内容。我尝试过所有的方式add
,setVisible
,validate
等,并通过其他一些问题,但似乎没有任何工作。我还尝试将victoryScreen
与最初的欢迎屏幕一起宣布,并将其设置为不可见(然后在我想要显示它时将其设置为可见),但这只是在开始时将灰色面板放在所有内容上。这似乎是什么时候构建的东西,它会自动绘制。将板作为另一个JPanel层看起来很危险,但我对JSwing知之甚少。
无论如何,我很难过。任何关于使胜利屏幕(以及最终其他人)按照期望显示的程序的建议?
*编辑:这是我推翻paintComponent
对屏幕显示类的方式:
public void paintComponent(Graphics g){
//works fine for welcome screen
g.drawImage(screenImage, 0, 0, 960, 540, null);
repaint();
}
为什么不使用['CardLayout'](http://docs.oracle.com/javase/tutorial/uiswing/layout/card.html)? – MadProgrammer
我想我没有读到他们足够的。现在看起来有点晚了,因为在接下来的24小时内这个主要项目将会是Java/Swing初学者。 :( – nicole
@MadProgrammer ..或一个JLayeredPane或玻璃窗格或.. –