Я использую Swing для создания небольшого GUI на Java. Все, что я пытаюсь сделать, это взять ArrayList
из Circle
s и нарисовать их. Я столкнулся с двумя проблемами:Рисовать и перемещать круг в Java
1) Мне нужно вызвать метод draw
, прежде чем он начертит круг. Если я просто вызову свой метод draw
, как только ничего не произойдет, я получу пустой рисунок. Если я вызову его в цикле, который выполняется менее 30 миллисекунд, он будет рисовать только первый из двух кругов, которые я хочу рисовать. Наконец, если я назову его более 30 миллисекунд, он рисует оба круга, которые я пытаюсь сделать.
и
2) Когда я двигаю один из кругов, я получаю «мерцание» на чертеже.
Я не слишком хорошо знаком с программированием Swing. Я посмотрел образец кода и просмотрел несколько видеороликов - и то, что у меня есть, выглядит для меня правильным. Но я полагаю, я, должно быть, что-то испортил, потому что в видео, которые я смотрел, это не похоже на это.
Вот мой GUI
класс:
package gui;
import draw.*;
import java.util.List;
import javax.swing.*;
public class GUI extends JFrame {
private CirclePainter drawingBoard = new CirclePainter();
public GUI()
{
setSize(500, 500);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
this.setVisible(true);
this.add(drawingBoard);
drawingBoard.setVisible(true);
}
public void draw(List<Circle> circles)
{
drawingBoard.paintComponent(drawingBoard.getGraphics(), circles);
}
}
мой CirclePainter
класс
package gui;
import draw.Circle;
import javax.swing.*;
import java.awt.*;
import java.util.List;
class CirclePainter extends JPanel
{
public void paintComponent(Graphics graphics, List<Circle> circles)
{
super.paintComponent(graphics);
for(Circle circle : circles)
graphics.fillOval(circle.getX(), circle.getY(), circle.getRadius() * 2, circle.getRadius() * 2);
}
}
EDIT: отредактированный некоторый код, так как это для школьного проекта. Остального кода должно быть достаточно для того, чтобы кто-то посетил в будущем, чтобы все еще понять вопрос.
Я думаю, что совет Eels был лучше ... но этот ответил на мой вопрос. Итак ... я выбираю тебя. Благодаря! – ThomYorkkke
@ThomYorkkke: так что мое быстрое и грязное исправление выбрано из-за хорошего совета [Hovercraft Full Of Eels] (http://stackoverflow.com/users/522444/hovercraft-full-of-eels) ... Спасибо. Пожалуйста, взгляните на другие примеры (например, [Java Animate JLabel] (http://stackoverflow.com/a/12545773/1694043)), чтобы найти больше кода анимации и удачи в ваших кругах! –
Это все о простом выходе ... :-D – ThomYorkkke