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 回答