1/*
2 * Copyright (c) 1997, 2005, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.  Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26package javax.swing;
27
28import java.awt.Component;
29
30
31/**
32 * Identifies components that can be used as "rubber stamps" to paint
33 * the cells in a JList.  For example, to use a JLabel as a
34 * ListCellRenderer, you would write something like this:
35 * <pre>
36 * {@code
37 * class MyCellRenderer extends JLabel implements ListCellRenderer<Object> {
38 *     public MyCellRenderer() {
39 *         setOpaque(true);
40 *     }
41 *
42 *     public Component getListCellRendererComponent(JList<?> list,
43 *                                                   Object value,
44 *                                                   int index,
45 *                                                   boolean isSelected,
46 *                                                   boolean cellHasFocus) {
47 *
48 *         setText(value.toString());
49 *
50 *         Color background;
51 *         Color foreground;
52 *
53 *         // check if this cell represents the current DnD drop location
54 *         JList.DropLocation dropLocation = list.getDropLocation();
55 *         if (dropLocation != null
56 *                 && !dropLocation.isInsert()
57 *                 && dropLocation.getIndex() == index) {
58 *
59 *             background = Color.BLUE;
60 *             foreground = Color.WHITE;
61 *
62 *         // check if this cell is selected
63 *         } else if (isSelected) {
64 *             background = Color.RED;
65 *             foreground = Color.WHITE;
66 *
67 *         // unselected, and not the DnD drop location
68 *         } else {
69 *             background = Color.WHITE;
70 *             foreground = Color.BLACK;
71 *         };
72 *
73 *         setBackground(background);
74 *         setForeground(foreground);
75 *
76 *         return this;
77 *     }
78 * }
79 * }
80 * </pre>
81 *
82 * @param <E> the type of values this renderer can be used for
83 *
84 * @see JList
85 * @see DefaultListCellRenderer
86 *
87 * @author Hans Muller
88 * @since 1.2
89 */
90public interface ListCellRenderer<E>
91{
92    /**
93     * Return a component that has been configured to display the specified
94     * value. That component's <code>paint</code> method is then called to
95     * "render" the cell.  If it is necessary to compute the dimensions
96     * of a list because the list cells do not have a fixed size, this method
97     * is called to generate a component on which <code>getPreferredSize</code>
98     * can be invoked.
99     *
100     * @param list The JList we're painting.
101     * @param value The value returned by list.getModel().getElementAt(index).
102     * @param index The cells index.
103     * @param isSelected True if the specified cell was selected.
104     * @param cellHasFocus True if the specified cell has the focus.
105     * @return A component whose paint() method will render the specified value.
106     *
107     * @see JList
108     * @see ListSelectionModel
109     * @see ListModel
110     */
111    Component getListCellRendererComponent(
112        JList<? extends E> list,
113        E value,
114        int index,
115        boolean isSelected,
116        boolean cellHasFocus);
117}
118