Я попытался нарисовать некоторые фигуры, как вы можете видеть ниже (я не включил другой класс, который включает основной метод) ... проблема в том, что он не перерисовывается, я просто получаю три толстые строки в качестве вывода, но он должен рисовать овал и два прямоугольника, так что они двигаются в кадре, как работает цикл в то время как ...Как перерисовать фигуры в java?
package shapes;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
public class GamePanel extends JPanel {
int n1=0;
int n2=0;
int n3=0;
@Override
public void paintComponent(Graphics g) {
do {
// super.paintComponent(g);
g.drawRect(n1++, 33, 54, 84);
g.setColor(Color.BLUE);
g.fillRect(100, n2++, 56, 97);
// g.setColor(Color.BLUE);
g.drawOval(44, n3++, 44, 66);
} while (n1<=500 && n2<=500 && n3<=500);
n1++;
n2++;
n3++;
repaint();
}
}
как исправить код, чтобы сделать его перерисовывает цифры для каждого цикла, так что не показывает три толстые линии, как выход ?? ? (Я хочу, чтобы команда сделать включено) .. благодаря
Просьба уточнить вашу конкретную проблему или добавить дополнительные детали, чтобы выделить именно то, что вам нужно. Как это написано в настоящее время, трудно точно сказать, что вы просите. См. Страницу «Как спросить», чтобы помочь прояснить этот вопрос. –
Никогда не вызывайте repaint() в методе рисования - это вызовет бесконечный цикл. 'поэтому он не показывает три толстые строки' - хорошо, это то, что вы говорите, что код делать. Сначала вы рисуете прямоугольник, начинающийся с (0, 33), затем (1, 33), затем (2, 33), поэтому, конечно, вы получите большую толстую линию шириной 554 пикселя (500 + 54) и 84 пиксела высотой. Я понятия не имею, почему у вас есть 3 переменные, которые имеют одинаковое значение. Вы пытаетесь сделать какую-то анимацию, где картина меняется 500 раз? – camickr
Примечание: paintComponent должен рисовать текущее состояние объекта. Вы должны обновить состояние в другом месте, обычно в выделенном потоке. Каждый раз, когда вы обновляете состояние, делайте вызов 'repaint()' или 'repaint (50)', где 50 - это переиздание задержки n miliseconds – krzydyn