Maison  >  Article  >  Java  >  Comment charger une image sans figer votre formulaire Java Swing ?

Comment charger une image sans figer votre formulaire Java Swing ?

DDD
DDDoriginal
2024-11-24 14:35:12726parcourir

How to Load an Image Without Freezing Your Java Swing Form?

Comment afficher une image sans figer le formulaire

Dans votre code, lorsque vous cliquez sur le bouton, le processus de chargement de l'image bloque l'événement thread de répartition, provoquant le gel temporaire du formulaire. Pour éviter cela, vous pouvez utiliser un thread séparé pour effectuer le chargement de l'image en arrière-plan.

Solution utilisant javax.swing.SwingWorker

Le javax.swing.SwingWorker La classe vous permet d'exécuter une tâche dans un thread séparé tout en mettant à jour l'interface utilisateur (UI) à partir de la tâche. Voici comment vous pouvez l'utiliser pour résoudre votre problème :

Dans votre classe "client_Trackbus" :

 SwingWorker<Image, Void> imageLoader = new SwingWorker<Image, Void>() {

     @Override
     protected Image doInBackground() throws Exception {
         // Load the image from URL in a separate thread
         URL imageURL = new URL("http://www.huddletogether.com/projects/lightbox2/images/image-2.jpg");
         Image image = Toolkit.getDefaultToolkit().createImage(imageURL);
         return image;
     }

     @Override
     protected void done() {
         try {
             // Display the loaded image on the panel
             ImageIcon icon = new ImageIcon(get());
             label.setIcon(icon);
             jPanel1.add(label);

             // Resize the panel to fit the image
             jPanel1.setSize(label.getPreferredSize());

             // Update the form
             getContentPane().add(jPanel1);
             revalidate();
             repaint();
         } catch (Exception ex) {
             // Handle any exceptions here
         }
     }
 };

 // Start the image loading task in the background
 imageLoader.execute();

Ce code crée un SwingWorker qui s'exécute dans un thread séparé . La méthode doInBackground() charge l'image à partir de l'URL sans bloquer le thread de répartition des événements. Lorsque l'image est chargée, la méthode done() est appelée sur le thread de répartition des événements, où l'image est affichée et le formulaire est mis à jour. Cette approche permet au formulaire de rester réactif pendant le chargement de l'image.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn