2017-03-18 50 views
0

我創建了一個帶有加載組件的JPanel,名爲bkg,因此我想將其更改爲SlideShow,它擴展了jpanel,並在單擊按鈕時顯示它。這是從按鈕調用的代碼:更改JPanel的實例

public void startGame(){ 
    bkg.removeAll(); 
    bkg.revalidate(); 
    bkg.repaint(); 
    bkg = new SlideShow(); 
    contentPane.add(bkg, BorderLayout.CENTER); 
} 

在我創建了一些測試標籤的幻燈片構造,但是當我按一下按鈕,所有舊BKG組件的消失(我想),但是從幻燈片什麼我放置在構造函數中的組件顯示...如何將bkg JPanel更改爲擴展JPanel的另一個外部類?

+0

添加面板後嘗試重新繪製 – csirmazbendeguz

回答

2

建議:

  1. 爲什麼刪除/重新確認/重繪BKG變量時,你立即更換用另一種變量保持的當前對象?
  2. 要重新驗證並重新繪製這是什麼添加到contentPane後更換BKG對象之後的contentPane。
  3. 使用CardLayout幾乎總是更好,而不是手動交換。該教程可以在這裏找到:CardLayout tutorial
  4. 或者因爲它看起來像是重新開始遊戲,所以可能會給SlideShow類設置一個reset()方法,它將模型和其可見狀態都設置爲其原始狀態。

所以

public void startGame(){ 

    // *** no need for this *** 
    // bkg.removeAll(); 
    // bkg.revalidate(); 
    // bkg.repaint(); 


    bkg = new SlideShow(); 
    contentPane.add(bkg, BorderLayout.CENTER); 

    // *** add this *** 
    contentPane.revalidate(); 
    contentPane.repaint(); 
} 

或者,如果你去重置選項,則該方法將簡化爲:

public void startGame(){ 
    bkg.reset(); 
} 

但是,這種復位方法是關鍵,細節取決於結構你的程序的其餘部分。