我想創建一個面板更改圖片。 這是我的面板:幀刷新問題
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);
}
}
我有保持面板的框架,但沒有圖片顯示。 試圖定期從框架重新繪製 - 造成了一些有趣的,但不想要的結果... 任何想法爲什麼?我究竟做錯了什麼?我應該如何刷新框架的組件?
'repaint'可能是答案。但我只想提到你應該重寫'paintComponent'而不是'paint'。你也可以擴展'JComponent'而不是'JPanel'(一些botchers擴展了'JPanel',因爲它會爲你調用'setOpaque(true);'(考慮到這個努力!),只有'JPanel'沒有如果你喜歡冒險的話,可以使用源代碼或者API文檔),但是一些PL&F可以,而'image'應該是'volatile',或者很好地傳遞給EDT。 – 2010-08-29 20:51:02