IIOReadProgressListener listener = new MyReadProgressListener();
reader.addIIOReadProgressListener(listener);
It’ll throw events while the reading process is going on. The following example shows a JProgressBar while reading the image fruit.png, to be used as background.
Main.java:
import javax.imageio.metadata.*;
import javax.imageio.stream.*;
import javax.imageio.event.*;
import javax.imageio.*;
import javax.swing.event.*;
import java.awt.image.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.awt.*;
import java.io.*;
public class Main extends JFrame
{
JProgressBar progressBar;
BufferedImage background = null;
public Main() {
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
System.exit(1);
}
});
progressBar = new JProgressBar(0, 100);
getContentPane().setLayout(new BorderLayout());
getContentPane().add(BorderLayout.NORTH, progressBar);
}
public void loadBackgroundImage(String filename) throws Exception {
Iterator readers = ImageIO.getImageReadersByFormatName("png");
ImageReader reader = (ImageReader) readers.next();
IIOReadProgressListener listener = new MyReadProgressListener();
reader.addIIOReadProgressListener(listener);
ImageInputStream iis = ImageIO.createImageInputStream(new File(filename));
reader.setInput(iis, true);
background = reader.read(0);
}
public static void main(String []args) throws Exception {
Main main = new Main();
main.setSize(400, 150);
main.setVisible(true);
main.loadBackgroundImage("fruit.png");
}
public void paint(Graphics g) {
System.out.println(background);
if (background != null) {
g.drawImage(background, 0, 0, getWidth(), getHeight(), this);
}
}
class MyReadProgressListener implements IIOReadProgressListener {
public MyReadProgressListener() {}
public void imageProgress(ImageReader source, final float percentageDone) {
System.out.println("imageProgress: " + percentageDone);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
progressBar.setValue((int) percentageDone);
}
});
}
public void imageComplete(ImageReader source) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
// wait for a bit until bufferedimage is assigned by reader
Thread.sleep(50);
}
catch(InterruptedException e) { }
repaint();
}
});
}
public void imageStarted(ImageReader source, int imageIndex) { }
public void readAborted(ImageReader source) { }
public void sequenceComplete(ImageReader source) { }
public void sequenceStarted(ImageReader source, int minIndex) { }
public void thumbnailComplete(ImageReader source) { }
public void thumbnailProgress(ImageReader source, float percentageDone) { }
public void thumbnailStarted(ImageReader source, int imageIndex, int thumbnailIndex) { }
}
}
Catching events while an image is being read using ImageIO
Joris Van den BogaertAdd an IIOReadProgressListener to your reader.
It’ll throw events while the reading process is going on. The following example shows a JProgressBar while reading the image fruit.png, to be used as background.
Main.java:
You might also like
Scrolling a JScrollPane to the top programmatically
Call the method scrollRectToVisible of the component that is added to the JScrollPane container as shown...
Creating a JInternalFrame without a...
Try this:Main.java:
Setting the margin of a JButton
Use the method setMargin and specify an Insets object with (bottom, left, right, top) margins. Main.java: