2

背景として画像を設定する JPanel があります。画像の上にたくさんの円を描く必要があります。これで、円は座標 x、y に基づいて配置され、サイズは整数サイズに基づきます。これが私のクラスとして持っているものです。

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.JPanel;

class ImagePanel extends JPanel {

    private Image img;
    CircleList cList;  //added this

    public ImagePanel(Image img) {
        this.img = img;
        Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));
        setPreferredSize(size);
        setMinimumSize(size);
        setMaximumSize(size);
        setSize(size);
        setLayout(null);

        cList = new CircleList(); //added this
    }

    public void paintComponent(Graphics g) {
        g.drawImage(img, 0, 0, null);

        cList.draw(null); //added this
    }
}

これを実行できるメソッドを作成するにはどうすればよいですか?

4

4 に答える 4

2

最も簡単なことは、これらの線に沿って何かをpaintComponentメソッドに配置することです。

int x = ...;
int y = ...;
int radius = ...;
g.drawOval(x, y, radius, radius);
于 2009-12-02T22:58:53.593 に答える
2

あなたのアプローチは、クラスCircleListを使用してすべての円と描画ルーチンも保持する、これに似たものになる可能性があります。

class CircleList
{
  static class Circle
  {
    public float x, y, diameter;
  }

  ArrayList<Circle> circles;

  public CirclesList()
  {
    circles = new ArrayList<Circle>();
  }

  public void draw(Graphics2D g) // draw must be called by paintComponent of the panel
  {
    for (Circle c : circles)
      g.fillOval(c.x, c.y, c.diameter, c.diameter)
  }
}
于 2009-12-02T23:06:59.870 に答える
1

おそらく、描画する円に関する情報を格納するために ArrayList を作成する必要があるでしょう。次に、paintComponent() メソッドが呼び出されると、ArrayList をループして円を描画します。

カスタム ペインティング アプローチは、これが長方形に対してどのように行われるかを示しています。楕円のコードを変更することもできます。おそらく、動的に行うのではなく、位置情報で配列を更新するメソッドを追加します。

于 2009-12-02T23:01:30.023 に答える
1

あなたは見ましたJXLayerか?これは、GUI 要素の上に特別なペイントを明白な方法で重ねることができる素晴らしいライブラリです。JDK7の主要なJavaライブラリに含まれると思います

于 2009-12-02T23:08:07.200 に答える