オブジェクトからカスタム JPanel に複数の画像を描画する際に問題が発生しています。JPanel 上のオブジェクトの 1 つのイメージ表現を正常に描画できました。オブジェクトを追加しても、同じ Graphics2D オブジェクトを使用するため、他の Image の上にペイントするだけだと思います。
そこで、Shapes、Image、および Object を含むカスタム JComponent を作成することにしましたが、残念ながらうまく機能しません。私の考えでは、これにより、JPanel が各オブジェクトに対して for ループを使用し、ペイントする新しい Graphics2D オブジェクトを作成できるようになると考えました。
これは、私がプログラミングしているゲーム用です。参考までに。私がペイントしようとしているオブジェクトは、操作する必要がある画面上のユニットです。
public class ShipGraphic extends JComponent{
private Shape shipShape, combatShape;
private Image shipImage;
private ImageIcon si;
private int shipX = 0, shipY = 0, shipW, shipH, combatH, combatW, combatR;
private Ship ship;
public ShipGraphic(Ship ship)
{
this.ship = ship;
setImageIcon();
shipImage = si.getImage();
shipW = shipImage.getWidth(null);
shipH = shipImage.getHeight(null);
combatH = shipH * 2;
combatW = shipW * 2;
combatR = -(shipW * 2);
shipShape = new Rectangle2D.Double(shipX, shipY, shipW, shipH);
combatShape = new Ellipse2D.Double(combatR, combatR, combatW, combatH);
}
@Override
public void paintComponent(Graphics g)
{
super.paintComponents(g);
Graphics2D g2 = (Graphics2D) g;
Graphics2D g3 = (Graphics2D) g;
Graphics2D g4 = (Graphics2D) g;
g2.drawImage(shipImage, shipX, shipY, null);
g3.setColor(new Color(0,0,0,0));
g3.drawRect(shipX, shipY, shipW, shipH);
g4.draw(combatShape);
}
ShipGraphic は Rectangle を使用してユーザーが画像をクリックしたかどうかを確認し、Circle を使用して戦闘用の別の四角形と交差するかどうかを判断します。これらの 2 つの形状は、イメージの下に不透明に描画されます。
カスタム JPanel は、次の for ループを使用してそれらをパネルに追加します。
for ( Ship s : sector.getShips() )
{
ShipGraphic ship = new ShipGraphic(s);
}