[英]How to draw an image over JPanels
我有一个战舰游戏,试图在Grid
对象上绘制飞船,命中和未击中。 Grid
是具有许多Blocks
的JPanel实例。 Blocks
也是JPanel,但也是Grid
属性。 船在网格上绘制,但在块下绘制。 是否可以划块? 我尝试了Glass Pane,但效果不是很好。 还有其他解决方案吗?
是否可以划块? 我尝试了Glass Pane,但效果不是很好。 还有其他解决方案吗?
是的,一种不推荐但有时有用的方法是使用扩展的JPanel
并覆盖paint(Graphics g)
函数:
Class MyGridPane extends JPanel
{
@Override
public void paint(Graphics g) {
super.paint(g); // <----- don't forget to call this
// then anything you draw will appear above the child component's
Graphics2D g2d = (Graphics2D)g.create(); // cloning to work, it is safer aproach
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.3f));
g2d.fillRect(0, 0, getWidth(), getHeight());
g2d.dispose();// disposing the graphics object
}
}
或者,您可以考虑使用JLayeredPane
处理包含在目标panel(Grid)层上方的绘制图像的Panel。 查看How to Use Layered Pane
Blocks
也是JPanels
但也是Grid的属性。 这些船被绘制在网格上但在Blocks
。
有一个偷偷摸摸的方法可以实现,但是您可能需要将基本布局更改为GridBagLayout
。
基本上,您想将每个Block
添加到其自己的单元格中,但是GridBagLayout
将允许您添加可以扩展列和/或行的组件,从而可以添加在Blocks
上扩展的飞船。
当然,这假定您发货且效果基于组件
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.