![](/img/trans.png)
[英]How to add JComponent to JPanel after JPanel has been add to JFrame
[英]How to add 2 JComponent to JPanel at the same place
如何在整個JPanel上延伸的同一位置向JPanel添加2個JComponent? 我試圖:
add(ship,null);
加(ground,null);
我在猜測您的用例,但是是否將包含JPanel的背景圖像“磨碎”了? 如果是這樣,則以某種方式添加它,以使其充滿容器,當然可以使用BorderLayout通過BorderLayout.CENTER與容器一起填充。
我猜這艘船是在背景上繪制的精靈。 如果是這樣,請考慮使其不是JPanel,而是一個邏輯對象,該對象包含可以在地面的paintComponent方法中繪制的圖像Sprite。
與往常一樣,細節中會發現魔鬼。 你先。
編輯
您發表評論:
舞台是我的背景,它擴展了JPanel。 Ship是一個播放器元素(JComponent)。 地面(JComponent)是玩家無法觸摸的東西。 我想像繪制圖像的圖層一樣具有這兩個元素(地面和船只)。 我需要參考一點來檢查碰撞。
我假設您在繪制背景圖像的Stage對象中有一個paintComponent(Graphics g)
重寫方法。
基於此假設,我更改了先前的建議,因為我認為地面和艦船均不應擴展JPanel,因為您實際上不需要他們這樣做。 您已經擁有一個JPanel,可以在其上進行繪畫和游戲交互,那么當它們只會使事情變得混亂時,為什么還要創建更多呢? 我看到的唯一例外是地面或船舶是否需要容納其他組件,如果是,則可以,它們應該擴展JPanel。
考慮:
draw(Graphics g)
方法,該方法在調用並傳遞有效的Graphics實例時在x和y位置繪制各自的圖像。 paintComponent(Graphics g)
方法通過調用它們各自的draw方法來繪制這兩個實例。 編輯2
您現在問:
還有一個問題:我什么時候應該擁有keyListener?
我建議您不要使用KeyListener。
KeyListener是一個低級構造,通常,您應該首選使用諸如Key Bindings之類的高級構造,因為它們更安全,更易於使用,而不會引起副作用或出現問題。 例如,如果使用KeyListener,很容易遇到焦點問題,因為它僅在偵聽的組件具有焦點時才起作用。 如果您改用鍵綁定,則很容易避免。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.