Я рисую круг в JPanel и используя Swing Timer для обновления x, y координат круга.Перемещение круга по круговой траектории
Как перемещать круг по круговой траектории.
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g.create();
g2d.setColor(Color.RED);
Shape planet = new Ellipse2D.Double(x, y, 20, 20);
g2d.fill(planet);
g2d.dispose();
}
public void actionPerformed(ActionEvent evt) {
double R = 200;
for (double t = 0; t < 2 * Math.PI; t += 0.01) {
x = R * Math.cos(t) + 0;
y = R * Math.sin(t) + 0;
revalidate();
repaint();
}
}
Используйте таймер качания, а не петлю. Например, проверьте [эту ссылку] (http://stackoverflow.com/questions/19476685/java-keyevent-square-movement). –
@HovercraftFullOfEels Из внешнего вида этой функции эта функция рисует круг, а не устанавливает положение на орбите этого кадра. –
@ AimanAl-Eryani: Код имеет гораздо больше ошибок. Во-первых, он не будет компилироваться, так как он использует необъявленную переменную g2d, и поскольку он использует цикл for без заботы о потоке событий Swing. Согласно моему комментарию, нет абсолютно никакого места для цикла for, вызванного потоком событий Swing, в этом коде (или в вашем решении), поскольку из-за правил потоковой передачи Swing это не приведет к какой-либо анимации вообще. Опять же, ему нужно использовать таймер Swing и рассказать нам о проблемах с компиляцией. По внешнему виду он пытался заимствовать код, но не очень хорошо. Он также распоряжается графикой obj –