Проблема обновления кадра - PullRequest
       2

Проблема обновления кадра

0 голосов
/ 30 августа 2010

Я пытаюсь создать панель с изменяющимися картинками.Это моя панель:

public class AdvertisementPanel extends JPanel {
private BufferedImage image;

private ArrayList<String> pictures;
private int index = 0;

public AdvertisementPanel(String... pics) {
pictures = new ArrayList<String>(Arrays.asList(pics));
Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(
 new Runnable() {
  @Override
  public void run() {
   changeImage();
  }
}, 0, 5, TimeUnit.SECONDS);

}

public void paint(Graphics g) {
 g.drawImage(image, 0, 0, null);
}

private void changeImage() {
 String name = pictures.get(index);
try {
 File input = new File(name);
 image = ImageIO.read(input);
 index++;
 index %= pictures.size();
} catch (IOException ie) {
 Logger.getLogger().log(Level.SEVERE,
  "No adds found in given path: " + name);
}
}

У меня есть рамка, которая удерживает панель, но картинки не отображаются.Пытался периодически перекрашивать из рамки - вызывал какие-то забавные, но нежелательные результаты ... Есть идеи почему?Что я делаю неправильно?Как обновить компоненты фрейма?

1 Ответ

1 голос
/ 30 августа 2010

вам нужно перерисовывать каждый раз, когда вы меняете изображение.

О, и это должно быть сделано потоком обработки событий свинга:

Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(
 new Runnable() {
  @Override
  public void run() {
    SwingUtilities.invokeLater(new Runnable() {
      @Override
      public void run() {
        changeImage();
        repaint();
       }
    };
  }
}, 0, 5, TimeUnit.SECONDS);

ОБНОВЛЕНИЕ Чтобы исправить некоторые другие проблемы

public class AdvertisementPanel extends JPanel {
    private BufferedImage image;
    private ArrayList<String> pictures;
    private int index = 0;

    public AdvertisementPanel(String... pics) {
        pictures = new ArrayList<String>(Arrays.asList(pics));
        Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(
            new Runnable() {
                @Override
                public void run() {
                    changeImage();
                }
            }, 0, 5, TimeUnit.SECONDS);
    }

    private void changeImage() {
        final BufferedImage img = nextImage();
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                image = img;
                repaint();
            }
        });
    }

    public void paint(Graphics g) {
        if (image != null) {
            g.drawImage(image, 0, 0, null);
        }
    }

    private BufferedImage nextImage() {
        String name = pictures.get(index);
        try {
            index++;
            index %= pictures.size();
            File input = new File(name);
            return ImageIO.read(input);
        } catch (IOException ie) {
            Logger.getLogger("").log(Level.SEVERE,
                    "No adds found in given path: " + name);
            return null;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...