The JList Class

The JList class is the generic Swing implementation of a list component. In the default selection mode, you can make multiple selections by clicking with the mouse while holding down the modifier key defined by the current L&F (generally Shift for a single, contiguous range and Ctrl or Command for noncontiguous selections). The JList class does not provide scrolling capabilities, but it can be set as the viewport of a JScrollPane to support scrolling.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class ListExample extends JPanel {

       private BookEntry books[] = {
           new BookEntry("Ant: The Definitive Guide", "covers/ant.gif"),
           new BookEntry("Database Programming with JDBC and Java", 
                         "covers/jdbc.gif"),
           new BookEntry("Developing Java Beans", "covers/beans.gif"),
           new BookEntry("Developing JSP Custom Tag Libraries", "covers/jsptl.gif"),
           new BookEntry("Java 2D Graphics", "covers/java2d.gif"),
           new BookEntry("Java and XML", "covers/jxml.gif"),
           new BookEntry("Java and XSLT", "covers/jxslt.gif"),
           new BookEntry("Java and SOAP", "covers/jsoap.gif"),
           new BookEntry("Java and XML Data Binding", "covers/jxmldb.gif"),
           new BookEntry("Java Cookbook", "covers/jcook.gif"),
           new BookEntry("Java Cryptography", "covers/jcrypto.gif"),
           new BookEntry("Java Distributed Computing", "covers/jdist.gif"),
           new BookEntry("Java I/O", "covers/javaio.gif"),
           new BookEntry("Java in a Nutshell", "covers/javanut.gif"),
           new BookEntry("Java Management Extensions", "covers/jmx.gif"),
           new BookEntry("Java Message Service", "covers/jms.gif"),
           new BookEntry("Java Network Programming", "covers/jnetp.gif"),
           new BookEntry("Java Performance Tuning", "covers/jperf.gif"),
           new BookEntry("Java RMI", "covers/jrmi.gif"),
           new BookEntry("Java Security", "covers/jsec.gif"),
           new BookEntry("JavaServer Pages", "covers/jsp.gif"),
           new BookEntry("Java Servlet Programming", "covers/servlet.gif"),
           new BookEntry("Java Swing", "covers/swing.gif"),
           new BookEntry("Java Threads", "covers/jthread.gif"),
           new BookEntry("Java Web Services", "covers/jws.gif"),
           new BookEntry("Learning Java", "covers/learnj.gif")
       };

    private JList booklist = new JList(books);

    public ListExample( ) {
        setLayout(new BorderLayout( ));
        JButton button = new JButton("Print");
        button.addActionListener(new PrintListener( ));

        booklist = new JList(books);
        booklist.setCellRenderer(new BookCellRenderer( ));
        booklist.setVisibleRowCount(8);
        JScrollPane pane = new JScrollPane(booklist);

        add(pane, BorderLayout.NORTH);
        add(button, BorderLayout.SOUTH);
    }

    public static void main(String s[]) {
         JFrame frame = new JFrame("List Example");
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         frame.setContentPane(new ListExample( ));
         frame.pack( );
         frame.setVisible(true);
    }

    // An inner class to respond to clicks of the Print button
    class PrintListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            int selected[] = booklist.getSelectedIndices( );
            System.out.println("Selected Elements:  ");

            for (int i=0; i < selected.length; i++) {
                BookEntry element =
                  (BookEntry)booklist.getModel( ).getElementAt(selected[i]);
                System.out.println("  " + element.getTitle( ));
            }
        }
    }
}