Как нарисовать круг на JPanel? Java 2D - PullRequest
1 голос
/ 03 декабря 2009

У меня есть 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 ]

2 голосов
/ 03 декабря 2009

Ваш подход может быть чем-то похожим на этот, в котором вы используете класс 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 голос
/ 03 декабря 2009

Вы смотрели на JXLayer? Это потрясающая библиотека, которая позволяет наглядно наносить специальные слои поверх любого элемента GUI. Я считаю, что будет включен в основные библиотеки Java для JDK7

1 голос
/ 03 декабря 2009

Что ж, вы, вероятно, захотите создать ArrayList для хранения информации о нарисованных кругах. Затем, когда вызывается метод paintComponent (), вы просто перебираете ArrayList и рисуете круги.

Пользовательские подходы к рисованию показывает, как это можно сделать для прямоугольника. Вы можете изменить код для овала, а также, возможно, добавить методы для обновления массива информацией о местоположении, а не делать это динамически.

1 голос
/ 03 декабря 2009

Самое простое, что можно сделать, это поместить что-то в этом направлении в ваш метод paintComponent.

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