Mega Code Archive

 
Categories / Java / JDK
 

Swing Worker Image Loader

import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.List; import java.util.ArrayList; import java.io.File; import java.io.IOException; import java.awt.Image; import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextArea; import javax.imageio.ImageIO; import org.jdesktop.swingworker.SwingWorker; public class ImageLoader extends JFrame {     private JTextArea log;     private JPanel viewer;          public ImageLoader() {         super("Image Loader");                  this.log = new JTextArea(4, 4);         this.viewer = new JPanel();                  JButton start = new JButton("Start");         start.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {                String[] files = new String[] {                    "Bodie_small.png", "Carmela_small.png",                    "Death Valley_small.png", "Lake_small.png"                };                new ImageLoadingWorker(log, viewer, files).execute();            }         });                  add(new JScrollPane(log), BorderLayout.NORTH);         add(new JScrollPane(viewer), BorderLayout.CENTER);         add(start, BorderLayout.SOUTH);                  setSize(360, 280);     }          public static void main(String... args) {         SwingUtilities.invokeLater(new Runnable() {             public void run() {                 new ImageLoader().setVisible(true);             }         });     } } // Final result is a list of Image // Intermediate result is a message as a String class ImageLoadingWorker extends SwingWorker<List<Image>, String> {   private JTextArea log;   private JPanel viewer;   private String[] filenames;   public ImageLoadingWorker(JTextArea log, JPanel viewer, String... filenames) {     this.log = log;     this.viewer = viewer;     this.filenames = filenames;   }   // In the EDT   @Override   protected void done() {     try {       for (Image image : get()) {         viewer.add(new JLabel(new ImageIcon(image)));         viewer.revalidate();       }     } catch (Exception e) { }   }   // In the EDT   @Override   protected void process(String... messages) {     for (String message : messages) {       log.append(message);       log.append("\n");     }   }   // In a thread   @Override   public List<Image> doInBackground() {     List<Image> images = new ArrayList<Image>();     for (String filename : filenames) {       try {         images.add(ImageIO.read(new File("./build/"+filename)));         publish("Loaded " + filename);       } catch (IOException ioe) {         publish("Error loading " + filename);       }     }     return images;   }   }                     Filthy-Rich-Clients-SwingWorkerImageLoader.zip( 291 k)