Чтобы иметь компонент, который имеет aws кружок в заданном месте, правильно переопределите paintComponent
, как объяснено в oracle учебнике :
class PaintTimeUnit extends JPanel {
private final int xlocation, ylocation;
private static final int W = 500, H = 300, RADIUS = 50;
public PaintTimeUnit(int x, int y) {
xlocation = x;
ylocation = y;
setPreferredSize(new Dimension(W, H));
}
@Override
public void paintComponent(Graphics g) { //override paintComponent for custom painting
super.paintComponent(g); //call super
g.setColor(Color.RED); //set painting color
g.drawOval(xlocation, ylocation, RADIUS, RADIUS); //draw circle
}
}
Однако Как и было рекомендовано, лучше иметь контейнер, который содержит aws круг кружков. Для этого вам нужно добавить коллекцию, в которой будут храниться все круги, например:
List<Point> circleCenters== new ArrayList<>()
Вам также необходимо добавить очки к этой коллекции:
void addCircle(int centerX, int centerY){
circleCenters.add(new Point(centerX, centerY));
}
и иметь paintComponent
рисовать круги на основе их сохраненных центров:
public void paintComponent(Graphics g) { //override paintComponent for custom painting
super.paintComponent(g); //call super
g.setColor(Color.RED); //set painting color
for(Point center : circleCenters){
g.drawOval(center.x, center.y, RADIUS, RADIUS); //draw circle
}
}
Поместите его все вместе:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import java.util.ArrayList;
import java.util.List;
class PaintTimeUnit extends JPanel {
private final List<Point> circleCenters;
private static final int W = 500, H = 300, RADIUS = 50;
public PaintTimeUnit() {
circleCenters = new ArrayList<>();
setPreferredSize(new Dimension(W, H));
}
@Override
public void paintComponent(Graphics g) { //override paintComponent for custom painting
super.paintComponent(g); //call super
g.setColor(Color.RED); //set painting color
for(Point center : circleCenters){
g.drawOval(center.x, center.y, RADIUS, RADIUS); //draw circle
}
}
void addCircle(int centerX, int centerY){
circleCenters.add(new Point(centerX, centerY));
}
}
И используйте его:
PaintTimeUnit ptu= new PaintTimeUnit();
//add 3 circles
ptu.addCircle(90,90);
ptu.addCircle(150,150);
ptu.addCircle(210,90);
(
Запустите его онлайн )