Warum gif-animation nicht animieren, wenn Sie es in paintComponent()?
Ich bin mit paintComponent()
zu malen, ein gif-animiertes Bild im hintergrund von JPanel
.
Es zeigt sich das gif, aber nicht animiert.
Ich benutze java 1.5 und ich weiß, dass ich kann verwenden label mit icon.
Hat jeder Körper weiß, warum und wie es zu lösen ist?
private static class CirclePanel extends JPanel {
ImageIcon imageIcon = new ImageIcon(BarcodeModel.class.getResource("verify.gif"));
Point point = f.getLocation();
protected void paintComponent(Graphics g) {
Graphics gc = g.create();
Graphics2D g2d = (Graphics2D) g.create();
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.3f));
g2d.setColor(Color.BLUE);
g2d.drawImage(imageIcon.getImage(), getWidth() / 2, getHeight() / 2, null);
g2d.drawRect(0, 0, getWidth(), getHeight());
g2d.setStroke(new BasicStroke(10f,BasicStroke.CAP_ROUND,BasicStroke.JOIN_MITER));
g2d.setFont(g.getFont().deriveFont(Font.BOLD | Font.ITALIC,15f));
g2d.drawString("Wait Please ...",getWidth()/2-imageIcon.getIconHeight()/3,getHeight()/2+imageIcon.getIconHeight()+15);
g2d.dispose();
}
Dies ist das gif-Bild.
Bearbeitet: nur hinzufügen, Bild, Beobachter, um die g2d.drawImage () - Methode.
g2d.drawImage(imageIcon.getImage(), getWidth() / 2, getHeight() / 2, this);
- mögliche Duplikate von Zeigen eine animierte BG in Swing
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der Grund ist, dass die standard-Java ImageIO-API nur lädt das erste Bild der gif-Datei.
Wie zu beheben? Google für eine Gif-Loader für Java, die lädt jedes Bild der gif-Datei. Dann haben Sie zu malen, das richtige Bild zur richtigen Zeit. Eine alternative Möglichkeit wäre es, die verschiedenen png-Dateien, die jeder Zeit ein Bild der animation.
Update: Gut... Tatsächlich, nachdem ich einige der Forschung, es sieht aus wie die Art und Weise Sie Tat es tatsächlich lädt alle frames von animierten gif. Der Grund dafür ist, dass ImageIcon die Methode
getImage()
gibt immer das erste Bild.Um es zu beheben, können Sie versuchen, diese (ich bin mir nicht sicher, ob es funktionieren wird...)
Anstatt
Grahpics.drawImage()
verwendenImageIcon.paintIcon()
. Wie diese:Bild Beobachter wird sich darum kümmern.
Sollten Sie nur pas die Beobachter der
g2d.drawImage();
als unten.In meinem Fall "diese" beziehen sich auf die CirclePanel erstreckt JPanel, kann es sein, dass irgendeine Sache, zum Beispiel wenn Sie mit gif als Symbol für eine Schaltfläche, die Sie verwenden sollten, Taste, Bild-Betrachter.