I am writing a program which among other things takes a folder of images (Typically around 2000 jpeg images) resizes them, and adds them to a timeline of images. The result of this being as follows:

This works fine, however the way I have done this seems very inefficient. The code which processes these images is shown below:
public void setTimeline(Vector<String> imagePaths){ int numberOfImages = imagePaths.size(); JLabel [] TotalImages = new JLabel[numberOfImages]; setGridPanel.setLayout(new GridLayout(1, numberOfImages, 10, 0)); Dimension image = new Dimension(96, 72); if (imagePaths != null){ for(int i = 0; i <numberOfImages; i++){ TotalImages[i] = new JLabel(""); TotalImages[i].setPreferredSize(image); ImageIcon tempicon = new ImageIcon(imagePaths.elementAt(i)); Image tempimage = tempicon.getImage(); Image newimg = tempimage.getScaledInstance(96, 72, java.awt.Image.SCALE_SMOOTH); ImageIcon newIcon = new ImageIcon(newimg); TotalImages[i].setIcon(newIcon); setGridPanel.add(TotalImages[i]); } } } As can be seen, this code loops through each image path, adds it to a label and adds it to the panel - performing exactly as it should with the correct output.
However, the time taken to do this is substantial. Typically around 5 minutes for 2000 images (depending on the machine). I wondered if there is any way I could improve this performance by using different techniques?
Any help is greatly appreciated.
Image.getScaledInstance().