我有一个战舰游戏,我试图在Grid
对象上绘制船只,命中和未命中。 Grid
是JPanel的一个实例,其中包含许多Blocks
。 Blocks
也是JPanels,但是Grid
的属性。船只在网格上绘制但在块下面。是否可以画出积木?我尝试了Glass Pane并没有太好用。还有其他解决方案吗?
答案 0 :(得分:2)
是否可以画出积木?我尝试了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
来处理包含目标面板(网格)图层上方绘制图像的面板。
查看How to Use Layered Pane
答案 1 :(得分:0)
Blocks
也是JPanels
,但它们是Grid的属性。这些船是 正在网格上绘制但在Blocks
下。
有一种偷偷摸摸的方式来实现它,但您可能需要将基本布局更改为GridBagLayout
。
基本上,您希望将每个Block
添加到自己的单元格中,但GridBagLayout
将允许您添加可以展开列和/或行的组件,从而允许添加展开Blocks
的船只1}}。
当然,这假设您的船舶和效果基于组件