001 /* =========================================================== 002 * JFreeChart : a free chart library for the Java(tm) platform 003 * =========================================================== 004 * 005 * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors. 006 * 007 * Project Info: http://www.jfree.org/jfreechart/index.html 008 * 009 * This library is free software; you can redistribute it and/or modify it 010 * under the terms of the GNU Lesser General Public License as published by 011 * the Free Software Foundation; either version 2.1 of the License, or 012 * (at your option) any later version. 013 * 014 * This library is distributed in the hope that it will be useful, but 015 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 016 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 017 * License for more details. 018 * 019 * You should have received a copy of the GNU Lesser General Public 020 * License along with this library; if not, write to the Free Software 021 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 022 * USA. 023 * 024 * [Java is a trademark or registered trademark of Sun Microsystems, Inc. 025 * in the United States and other countries.] 026 * 027 * ------------------ 028 * PaletteSample.java 029 * ------------------ 030 * (C) Copyright 2002-2004, by David M. O'Donnell. 031 * 032 * Original Author: David M. O'Donnell; 033 * Contributor(s): David Gilbert (for Object Refinery Limited); 034 * 035 * $Id: PaletteSample.java,v 1.1.2.1 2005/11/24 16:11:48 mungady Exp $ 036 * 037 * Changes 038 * ------- 039 * 21-Jan-2003 : Added standard header (DG); 040 * 041 */ 042 043 package org.jfree.chart.editor; 044 045 import java.awt.BasicStroke; 046 import java.awt.Component; 047 import java.awt.Dimension; 048 import java.awt.Graphics; 049 import java.awt.Graphics2D; 050 import java.awt.Insets; 051 import java.awt.RenderingHints; 052 import java.awt.geom.Line2D; 053 054 import javax.swing.JComponent; 055 import javax.swing.JList; 056 import javax.swing.ListCellRenderer; 057 058 import org.jfree.chart.plot.ColorPalette; 059 060 061 /** 062 * A panel that displays a palette sample. 063 * 064 * @author David M. O'Donnell 065 */ 066 public class PaletteSample extends JComponent implements ListCellRenderer { 067 068 /** The palette being displayed. */ 069 private ColorPalette palette; 070 071 /** The preferred size of the component; */ 072 private Dimension preferredSize; 073 074 /** 075 * Creates a new sample. 076 * 077 * @param palette the palette. 078 */ 079 public PaletteSample(ColorPalette palette) { 080 this.palette = palette; 081 this.preferredSize = new Dimension(80, 18); 082 } 083 084 /** 085 * Returns a list cell renderer for the stroke, so the sample can be 086 * displayed in a list or combo. 087 * 088 * @param list the list component. 089 * @param value the value. 090 * @param index the index. 091 * @param isSelected a flag that indicates whether or not the item is 092 * selected. 093 * @param cellHasFocus a flag that indicates whether or not the cell has 094 * the focus. 095 * 096 * @return The renderer. 097 */ 098 public Component getListCellRendererComponent(JList list, Object value, 099 int index, 100 boolean isSelected, 101 boolean cellHasFocus) { 102 if (value instanceof PaletteSample) { 103 PaletteSample in = (PaletteSample) value; 104 setPalette(in.getPalette()); 105 } 106 return this; 107 } 108 109 /** 110 * Returns the current palette object being displayed. 111 * 112 * @return The palette. 113 */ 114 public ColorPalette getPalette() { 115 return this.palette; 116 } 117 118 /** 119 * Returns the preferred size of the component. 120 * 121 * @return The preferred size. 122 */ 123 public Dimension getPreferredSize() { 124 return this.preferredSize; 125 } 126 127 /** 128 * Draws the sample. 129 * 130 * @param g the graphics device. 131 */ 132 public void paintComponent(Graphics g) { 133 134 Graphics2D g2 = (Graphics2D) g; 135 g2.setRenderingHint( 136 RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF 137 ); 138 Dimension size = getSize(); 139 Insets insets = getInsets(); 140 double ww = size.getWidth() - insets.left - insets.right; 141 double hh = size.getHeight() - insets.top - insets.bottom; 142 143 g2.setStroke(new BasicStroke(1.0f)); 144 145 double y1 = insets.top; 146 double y2 = y1 + hh; 147 double xx = insets.left; 148 Line2D line = new Line2D.Double(); 149 int count = 0; 150 while (xx <= insets.left + ww) { 151 count++; 152 line.setLine(xx, y1, xx, y2); 153 g2.setPaint(this.palette.getColor(count)); 154 g2.draw(line); 155 xx += 1; 156 } 157 } 158 159 /** 160 * Sets the palette object being displayed. 161 * 162 * @param palette the palette. 163 */ 164 public void setPalette(ColorPalette palette) { 165 this.palette = palette; 166 this.repaint(); 167 } 168 169 }