我正在研究基於主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或玻璃窗格或.. –