我想创建一个面板更改图片。 这是我的面板:帧刷新问题
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