如何在JPanel上绘制圆圈? Java 2D

时间:2009-12-02 22:51:20

标签: java user-interface swing java-2d

我有一个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 个答案:

答案 0 :(得分: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)
  }
}

答案 1 :(得分:1)

最简单的方法是将这些内容放在paintComponent方法中。

int x = ...;
int y = ...;
int radius = ...;
g.drawOval(x, y, radius, radius);

答案 2 :(得分:1)

好吧,您可能希望创建一个ArrayList来存储有关要绘制的圆的信息。然后,当调用paintComponent()方法时,只需遍历ArrayList并绘制圆圈。

Custom Painting Approaches显示了如何对矩形进行此操作。您可以修改椭圆的代码,也可以添加方法来使用位置信息更新数组,而不是动态地执行。

答案 3 :(得分:1)

你看过JXLayer了吗?它是一个非常棒的库,允许您以明显的方式在任何GUI元素上层叠特殊绘画。我相信它将包含在JDK7的主要java库中