Java Проблема с super.paintComponents (g), она делает экран печати - PullRequest
1 голос
/ 14 июня 2011

Я пытаюсь нарисовать в Java, с классами и иерархией.Но моя область рисования не получает фоновый цвет (определенный как белый), и когда я щелкаю ее, она создает экран печати в области рисования jpanel.С super.paintComponent (g) интерфейс выглядит нормально, но я получаю только одно очко каждый раз.С помощью super.paintComponents (g) он печатает кадр в области jpanel.

есть мысли о том, что случилось?

public class MandaDesenhar extends JPanel
{
static int x;
static int y;

private static final long serialVersionUID = 1L;
int i = 0;

public void paintComponent(Graphics g)
{   
    super.paintComponents(g);

    if (Paint4Fun.lista.size() == 0)
        return;

    while (i<Paint4Fun.lista.size())
    {
        FormaPrimitiva forma = Paint4Fun.lista.get(i);
        forma.desenha(g);
        i++;
    }
}

1 Ответ

3 голосов
/ 14 июня 2011

Вы должны определить i локально в вашем методе paintComponent, а не вне его, и инициализировать его там как 0.

В противном случае вы всегда рисуете только новые элементы списка, а не старые.

Edit: Вы можете написать свой цикл лучше как цикл for:

for(int i = 0; i < Paint4Fun.lista.size(); i++) {
   FormaPrimitiva forma = Paint4Fun.lista.get(i);
   forma.desenha(g); 
}

или еще яснее:

for(FormaPrimitiva forma : Paint4Fun.lista) {
    forma.desenha(g);
}

Как правило, всегда объявляйте переменные (например, i здесь) в наименьшей возможной области видимости (метод или даже цикл, здесь).

...