簡體   English   中英

來自其他類的 JFrame/JPanel 繪圖

[英]JFrame/JPanel drawing from other class

我正在用java開發一個簡單的游戲。 雖然這可能是一個愚蠢的問題,但我確實需要一些幫助。 我的游戲將具有多個級別。 我希望能夠從新的類文件中加載每個級別以使其更易於管理。 如果這不是一個穩定的解決方案,請告訴。

現在我的問題是這個。 如果我的 JPanel 在類文件 A 中,我如何從類文件 B 中繪制它? 想象一下類文件 B 是我的級別,所以我會有類文件 C、D、E 等等,所有不同的級別我都希望能夠繪制到類文件 A 中,該類文件包含我的 JPanel。 我怎樣才能做到這一點?

兩種可能的解決方案是:

將類文件傳遞給JPanel ,例如:

JPanel j = new JPanel();
Level l1 = new Level(1);
Level l2 = new Level(2);
j.initlevel(l1);
//wait until level 1 is done
j.initlevel(l2);

並讓 initlevel 進行加載:

public void initlevel(Level l){
    // for all level parts, load them into "this"
}

或者您可以公開JPanel某些屬性,並將其傳遞給級別:

JPanel j = new JPanel();
new Level(1, j);
//wait until level 1 is done
new Level(2, j);

並制作 Level 的構造函數:

public Level(int level, JPanel j){
    //for all level parts load them into "j"
}

請注意,這是一個非常基本的結構,如果您的游戲變得更加復雜,您可能需要考慮閱讀模型-視圖-控制器模式。

理想的設計使 UI 繪圖遠離游戲邏輯,因此您走在正確的軌道上。 一個這樣的解決方案的一個例子可能是一個類,它組成了一個 JPanel,當級別改變時它會得到通知。 例如

public class LevelViewController implements LevelChangedListener {
   private JPanel viewPane;

   public LevelViewController(JPanel viewPane) {
      this.viewPane = viewPane;
   }

   public void levelChanged(Level level) {
      // Update JPanel with logic now the level has changed
      ...
   }
}

public interface LevelChangedListener {
     void levelChanged(Level level);
}

無論知道玩家要進入下一個級別,然后都需要通知它的 LevelChangedListeners 集合(您的 LevelViewController 就是其中之一),這將依次更新您的 JPanel。 如果您希望在關卡更改后更新其他內容,那么您也可以掛鈎其他 LevelChangedListeners。

暫無
暫無

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

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