Agregue JLabel con imagen a JList para mostrar todas las imágenes

Aquí está mi código. No muestra imágenes en el marco y en su lugar muestra texto. ¿Alguien podría sugerirme qué cambio debería hacer en el código para que me permita mostrar las imágenes en un marco?

import java.awt.Component; import java.awt.Image; import java.awt.Toolkit; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.DefaultListModel; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JScrollPane; public class ListView { public static void main(String[] args) throws IOException { JFrame frame=new JFrame(); frame.setSize(500,500); JLabel lbl[] = new JLabel[10]; DefaultListModel listModel; ImageIcon[] b = new ImageIcon[10]; //JList lsm=new JList(); listModel = new DefaultListModel(); File folder = new File("C:/Documents and Settings/All Users/Documents/My Pictures/Sample Pictures"); File[] listOfFiles = folder.listFiles(); JLabel[] lb=new JLabel[15]; for (int i = 0; i < listOfFiles.length; i++) { System.out.println("chek panth"+listOfFiles[i].getName().toString()); // b[i] = ImageIO.read(new File("C:/Documents and Settings/All Users/Documents/My Pictures/Sample Pictures/" + listOfFiles[i].getName().toString())); b[i] = new ImageIcon("C:/Documents and Settings/All Users/Documents/My Pictures/Sample Pictures/" + listOfFiles[i].getName().toString()); lb[i]=new JLabel(b[i]); listModel.add(i, lb[i]); } JList lsm=new JList(listModel); Component add = frame.add(new JScrollPane(lsm)); frame.setVisible(true); } } 

Tenga en cuenta que no diseñaría el código de esta manera, pero quería mantenerlo lo más cercano posible al original, mientras hacía que funcionara mostrar una lista de imágenes en un cuadro basado en Windows.

Vista de la lista

 import java.awt.*; import java.awt.image.BufferedImage; import javax.swing.*; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; public class ListView { public static void main(String[] args) throws IOException { String path = "C:/Documents and Settings/All Users/Documents/" + "My Pictures/Sample Pictures"; JFrame frame=new JFrame(); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); File folder = new File(path); File[] listOfFiles = folder.listFiles(); DefaultListModel listModel = new DefaultListModel(); int count = 0; for (int i = 0; i < listOfFiles.length; i++) { System.out.println("check path"+listOfFiles[i]); String name = listOfFiles[i].toString(); // load only JPEGs if ( name.endsWith("jpg") ) { ImageIcon ii = new ImageIcon(ImageIO.read(listOfFiles[i])); listModel.add(count++, ii); } } JList lsm=new JList(listModel); lsm.setVisibleRowCount(1); frame.add(new JScrollPane(lsm)); frame.pack(); frame.setVisible(true); } } 

puede usar listcellrenderer para mostrar tanto la imagen como el texto en jlist, probablemente como el siguiente para mostrar la etiqueta con el icono en la lista

  public class myRenderer extends DefaultListCellRenderer { @Override public Component getListCellRendererComponent(JList list, Object value, int index,boolean isSelected, boolean cellHasFocus) { //JLabel l = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); if(value instanceof JLabel) { this.setText(((JLabel)value).getText()); this.setIcon(((JLabel)value).getIcon()); } return this; } }