![](/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.