Проблемы перерисовки в JPanel Runnable - PullRequest
0 голосов
/ 06 мая 2011

Я пишу программу, которая будет воспроизводить песню и отображать изображения в JPanel.Песня воспроизводится нормально, первое изображение нарисовано (я полагаю, что после первоначального вызова paintComponent), но каким-то образом не вызывается repaint ().Я мог бы действительно использовать дополнительный набор глаз.У меня есть код ниже для класса JPanel, который будет отображать изображения.Большое спасибо!

class pictures extends JPanel implements Runnable {
private ImageIcon images[];
private Thread imagerunner;
private int currentImage;

pictures() {
    super();
    imagerunner = new Thread(this);
    images = new ImageIcon[6];
    imagerunner = new Thread(this);
    images[0] = new ImageIcon("pic1.jpg");
    images[1] = new ImageIcon("pic2.jpg");
    images[2] = new ImageIcon("pic3.jpg");
    images[3] = new ImageIcon("pic4.jpg");
    images[4] = new ImageIcon("pic5.jpg");
    images[5] = new ImageIcon("pic6.jpg");
    currentImage = 0;
}

public void run() {
    int i = 0;
    System.out.println("starting pics");
    while( i < 100 ) {
        System.out.println("about to repaint()");
        this.repaint();
        System.out.println( "image: " + currentImage );
        waiting( 2000 );
        currentImage++;
    }
    System.out.println("done");
}

public void paintComponent( Graphics g ) {
    super.paintComponent( g );
    System.out.println("repainting");
    images[ currentImage ].paintIcon(this,g,0,0);
}

public static void waiting (int n) {
    long t0, t1;
    t0 =  System.currentTimeMillis();
    do{
        t1 = System.currentTimeMillis();
    }
    while (t1 - t0 < n);
}
}

Ответы [ 3 ]

0 голосов
/ 06 мая 2011

Кажется, что метод waiting() блокирует EDT.Было бы лучше использовать Swing Timer для планирования обновлений.

0 голосов
/ 06 мая 2011

Вам необходимо сделать следующее:

1) На самом деле создать экземпляр для запуска.2) Вам нужно будет регулярно вызывать repaint (), чтобы ваш дисплей перерисовывался.

Надеюсь, это поможет.Ура! * * 1005

0 голосов
/ 06 мая 2011
  1. Вы никогда не запускаете тему imagerunner.
  2. Назначается дважды (без причины).
  3. Вы не можете изменять графический интерфейс из другого потока. Для этого используйте Утилиты Swing .
...