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