Share this page 

Have images in a JListTag(s): Swing


This snippet uses these 2 images   
import javax.swing.*;
import java.awt.*;
import java.util.*;

public class JListWithImages extends JList {

 public JListWithImages() { 
   setCellRenderer(new CustomCellRenderer()); 
   }

 public static void main(String[] args) {
   JFrame frame = new JFrame();
   JPanel panel = new JPanel();
   Vector vector = new Vector();
   panel.setForeground(Color.black);
   panel.setBackground(Color.white);

   // first line
   JPanel jp1 = new JPanel();
   jp1.add(new JLabel(new ImageIcon("gumby.gif")));
   jp1.add(new JLabel("A line for Gumby"));
   jp1.add(new JLabel(new ImageIcon("gumby2.gif")));

   // second line
   JPanel jp2 = new JPanel();
   jp2.add(new JLabel(new ImageIcon("gumby.gif")));
   jp2.add(new JLabel("Another line for Gumby"));
   jp2.add(new JLabel(new ImageIcon("gumby2.gif")));

   vector.addElement(jp1);
   vector.addElement(jp2);

   JListWithImages jlwi = new JListWithImages();
   jlwi.setListData(vector);

   panel.add(jlwi);
   frame.getContentPane().add(panel);
   frame.setSize(300,300);
   frame.setVisible(true);
   }

 class CustomCellRenderer implements ListCellRenderer {
   public Component getListCellRendererComponent
    (JList list, Object value, int index, 
     boolean isSelected,boolean cellHasFocus) {
     Component component = (Component)value;
     component.setBackground
      (isSelected ? Color.black : Color.white);
     component.setForeground
      (isSelected ? Color.white : Color.black);
     return component;
     }
   }
}

The above How-to use the default layout, so each line line in the JList are centered. The version below is showing each line left justified instead.

import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.util.*;

public class JListWithImages extends JList {

 public JListWithImages() {
   setCellRenderer(new CustomCellRenderer());
   }

 public static void main(String[] args) {
   JFrame frame = new JFrame();
   JPanel panel = new JPanel();
   Vector vector = new Vector();
   panel.setForeground(Color.black);
   panel.setBackground(Color.white);

   // first line
   JPanel jp1 = new JPanel(new FlowLayout(FlowLayout.LEFT));   // NEW
   jp1.add(new JLabel(new ImageIcon("gumby.gif")));
   jp1.add(new JLabel("A line for Gumby"));
   jp1.add(new JLabel(new ImageIcon("gumby2.gif")));

   // second line
   JPanel jp2 = new JPanel(new FlowLayout(FlowLayout.LEFT));  // NEW
   jp2.add(new JLabel(new ImageIcon("gumby.gif")));
   jp2.add(new JLabel("Another line for Gumby"));
   jp2.add(new JLabel(new ImageIcon("gumby2.gif")));

   vector.addElement(jp1);
   vector.addElement(jp2);

   JListWithImages jlwi = new JListWithImages();
   jlwi.setListData(vector);
   jlwi.setBorder(new LineBorder(Color.black));

   panel.add(jlwi);
   frame.getContentPane().add(panel);
   frame.setSize(300,300);
   frame.setVisible(true);
   }

 class CustomCellRenderer implements ListCellRenderer {
   public Component getListCellRendererComponent
    (JList list, Object value, int index,
     boolean isSelected,boolean cellHasFocus) {
     Component component = (Component)value;
     component.setBackground
      (isSelected ? Color.black : Color.white);
     component.setForeground
      (isSelected ? Color.white : Color.black);
     return component;
     }
   }
}