1

オブジェクトに船、ヒット、ミスを描こうとしている戦艦ゲームがありGridます。Grid多くの を持つ JPanel のインスタンスですBlocksBlocksJPanel でもありますが、の属性ですGrid。船はグリッド上に描かれていますが、ブロックの下にあります。ブロックの上に描画することはできますか? Glass Pane を試してみましたが、うまくいきませんでした。他の解決策はありますか?

これが現在の様子で、船は C3 にあります。

4

2 に答える 2

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 
    }

}

または、ターゲット panel(Grid)のレイヤーのJLayeredPane上に描画された画像を含む Panel を操作するために使用することを検討することもできます。チェックアウトHow to Use Layered Pane

于 2013-11-11T17:12:07.543 に答える