繁体   English   中英

如何在JPanels上绘制图像

[英]How to draw an image over JPanels

我有一个战舰游戏,试图在Grid对象上绘制飞船,命中和未击中。 Grid是具有许多Blocks的JPanel实例。 Blocks也是JPanel,但也是Grid属性。 船在网格上绘制,但在块下绘制。 是否可以划块? 我尝试了Glass Pane,但效果不是很好。 还有其他解决方案吗?

这是现在的样子,船在C3。

是否可以划块? 我尝试了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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM