Montrer un BG animé dans Swing
Une animation (cyclisme) GIF peuvent être affichées dans un JLabel
ou en HTML (texte mis en forme des composants comme JEditorPane
) et être vu de cycle.
Mais pour charger une image pour peindre la toile de fond d'un récipient, I généralement utiliser ImageIO.read()
ou Toolkit.getImage()
(la dernière, quand je me sens nostalgique pour le dernier millénaire). Ni la méthode de chargement d'une image des résultats dans un vélo d'image, il est généralement juste la première image.
Comment faire pour charger un animé image pour l'arrière-plan?
source d'informationauteur Andrew Thompson
Vous devez vous connecter pour publier un commentaire.
À l'aide de
ImageIcon
est probablement la plus simple chose à faire. Un couple de choses à garder à l'esprit:ImageIcon(URL)
fait usage deToolkit.getImage(URL)
. Vous préférez peut-être l'aide d'Toolkit.createImage(URL)
au lieu -getImage()
peut utiliser la mise en cache ou l'image partagée de données.ImageIcon
rend l'utilisation d'unMediaTracker
efficacement attendre jusqu'à ce que l'image est complètement chargée.Donc, votre problème ne peut pas être l'utilisation de
Toolkit
(ImageIO
est une bête différente), mais plutôt le fait que vous n'êtes pas rendu pleinement chargé de l'image. Une chose intéressante à essayer serait:Mon Swing/AWT/J2D peut-être un peu floue, mais l'idée est que, depuis votre
ImagePanel
est unImageObserver
il peut être avisé de manière asynchrone sur les informations de l'image. LeComponent.imageUpdate()
la méthode à invoquerrepaint
en tant que de besoin.Edit:
Comme indiqué dans les commentaires, l'appel à
prepareImage
n'est pas nécessaire - un exemple de travail est inclus ci-dessous. L'essentiel est que le substituéepaintComponent
méthode appelleGraphics.drawImage
qui fournit lesImageObserver
crochet. LeimageUpdate
méthode (mise en œuvre enjava.awt.Component
) devront en permanence être appelé avec laImageObserver.FRAMEBITS
drapeau.Pour obtenir un vélo (animés) de GIF pour la peinture custom, une astuce consiste à charger à l'aide d'un
ImageIcon
. Alors que l'image renvoyée à partir de l'une des deux méthodes décrites dans la question est statique, on a obtenu à partir d'unImageIcon
est animé.Le code ci-dessous va ajouter 50 boutons, puis, peu de temps après les images de la 'zoom stars" GIF animé1 BG. Le
ImagePanel
permet d'étirer l'image à la taille du panneau.J'ai réussi à obtenir le gif animé à l'intérieur de mon Composite de cette façon:
Certains points de cette approche:
1. Le fichier image est dans le pot;
2. ImageIO.read() renvoie un BufferedImage, qui n'a pas de mise à jour de la ImageObserver;
3. Une autre alternative pour trouver des images qui sont regroupés dans le fichier jar est de demander à la classe Java chargeur, le code de chargement de votre programme, pour obtenir les fichiers. Il sait où sont les choses.
En faisant cela, j'ai été en mesure d'obtenir mon gif animé à l'intérieur de mon Composite et cela a fonctionné comme un charme.