簡體   English   中英

在JFrame窗口上臨時顯示JPanel

[英]Temporarily displaying JPanel over a JFrame window

我正在開發基於主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); 
}

不幸的是,這什么也沒顯示。 我嘗試了各種方式的addsetVisiblevalidate等,並仔細研究了其他一些問題,但似乎沒有任何效果。 我還嘗試了在初始歡迎屏幕旁邊聲明victoryScreen並將其設置為不可見(然后在我想顯示它時將其設置為可見),但是這只是在開始時將灰色面板置於所有內容上。 似乎在構造某些東西時,它會自動繪制。 將開發板作為另一個JPanel層看起來確實很冒險,但是我對JSwing知之甚少。

無論如何,我很沮喪。 根據需要顯示有關使勝利畫面(以及其他畫面)顯示的程序的任何建議嗎?

*編輯:這是我為屏幕顯示類覆蓋paintComponent的方法:

public void paintComponent(Graphics g){ 

              //works fine for welcome screen
      g.drawImage(screenImage, 0, 0, 960, 540, null); 
      repaint(); 
}

一種方法是通過CardLayout和多個JPanels。

做到這一點的另一種方法是設計一個狀態機,程序狀態在一個面板中改變。

老實說,這在java的當前狀態下是一個非常困難的問題,出於演示目的,請堅持第一個。 就個人而言,我更喜歡第二種選擇。

這兩種方法都令人沮喪且無效,因為CardLayout並非為游戲屏幕更改而設計,而制作一個嚴重依賴全局狀態的程序確實很難為之...

這可能不是最佳做法,但如果要盡快完成,

我的直接反應是僅使用setContentPane替換JFrame的內容,然后在游戲板上再次調用它以將其重新設置。

我認為對.add的調用與介紹屏幕的工作方式不同,是因為您沒有在添加勝利屏幕之前刪除游戲板,而是在添加游戲板之前刪除了介紹。 也許如果您刪除游戲板然后調用添加將勝利屏幕放進去,它將起作用嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM