📄 colorpropertyeditor.java
字号:
/**
* ========================================
* JFreeReport : a free Java report library
* ========================================
*
* Project Info: http://www.jfree.org/jfreereport/index.html
* Project Lead: Thomas Morgner (taquera@sherito.org);
*
* (C) Copyright 2000-2003, by Simba Management Limited and Contributors.
*
* This library is free software; you can redistribute it and/or modify it under the terms
* of the GNU Lesser General Public License as published by the Free Software Foundation;
* either version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307, USA.
*
* ------------------------------
* ColorPropertyEditor.java
* ------------------------------
* (C)opyright 2003, by Thomas Morgner and Contributors.
*
* Original Author: Thomas Morgner;
* Contributor(s): David Gilbert (for Simba Management Limited);
*
* $Id: ColorPropertyEditor.java,v 1.3 2004/04/20 18:54:42 taqua Exp $
*
* Changes
* -------------------------
* 25.10.2003 : Initial version
*
*/
package org.jfree.designer.propertyeditors;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Insets;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.util.Arrays;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.DefaultListCellRenderer;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JList;
import org.jfree.report.modules.gui.base.components.ActionButton;
import org.jfree.report.util.ImageUtils;
public final class ColorPropertyEditor
extends AbstractPropertyEditor
{
private final class ColorChooserAction
extends AbstractAction
{
/**
* Defines an <code>Action</code> object with a default description string and default
* icon.
*/
public ColorChooserAction ()
{
putValue(Action.NAME, "..");
}
/**
* Invoked when an action occurs.
*/
public final void actionPerformed (final ActionEvent e)
{
ColorPropertyEditor.this.setValue(JColorChooser.showDialog
(editor, "Select color", (Color) ColorPropertyEditor.this.getValue()));
}
}
private static final class ColorRenderer
extends DefaultListCellRenderer
{
public ColorRenderer ()
{
}
public final Component getListCellRendererComponent (final JList list,
final Object value,
final int index,
final boolean isSelected,
final boolean cellHasFocus)
{
final JLabel comp = (JLabel)
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
if (value == null)
{
comp.setText("<null>");
comp.setIcon(ImageUtils.createTransparentIcon(32, 16));
}
else
{
final ColorComboBoxModel.ColorCarrier cc = (ColorComboBoxModel.ColorCarrier) value;
comp.setText(cc.getName());
comp.setIcon(createImageIcon(32, 16, cc.getColor()));
}
return comp;
}
}
private static ImageIcon createImageIcon (final int width, final int height,
final Color color)
{
final BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
final int[] data = img.getRGB(0, 0, width, height, null, 0, width);
Arrays.fill(data, color.getRGB());
img.setRGB(0, 0, width, height, data, 0, width);
return new ImageIcon(img);
}
private JComponent editor;
private ColorComboBoxModel model;
public ColorPropertyEditor ()
{
editor = new EnableForwardPanel();
editor.setLayout(new BorderLayout());
model = new ColorComboBoxModel();
final JComboBox comboBox = new JComboBox(model);
comboBox.setRenderer(new ColorRenderer());
comboBox.addActionListener(new ActionListener()
{
/**
* Invoked when an action occurs.
*/
public void actionPerformed (final ActionEvent e)
{
setValue(model.getSelectedColor());
}
});
editor.add(comboBox, BorderLayout.CENTER);
final JButton button = new ActionButton(new ColorChooserAction());
button.setMargin(new Insets(0, 0, 0, 0));
editor.add(button, BorderLayout.EAST);
}
/**
* A PropertyEditor may choose to make available a full custom Component that edits its
* property value. It is the responsibility of the PropertyEditor to hook itself up to
* its editor Component itself and to report property value changes by firing a
* PropertyChange event. <P> The higher-level code that calls getCustomEditor may either
* embed the Component in some larger property sheet, or it may put it in its own
* individual dialog, or ...
*
* @return A java.awt.Component that will allow a human to directly edit the current
* property value. May be null if this is not supported.
*/
public final Component getCustomEditor ()
{
return editor;
}
/**
* Paint a representation of the value into a given area of screen real estate. Note
* that the propertyEditor is responsible for doing its own clipping so that it fits
* into the given rectangle.
* <p/>
* If the PropertyEditor doesn't honor paint requests (see isPaintable) this method
* should be a silent noop.
* <p/>
* The given Graphics object will have the default font, color, etc of the parent
* container. The PropertyEditor may change graphics attributes such as font and color
* and doesn't need to restore the old values.
*
* @param gfx Graphics object to paint into.
* @param box Rectangle within graphics object into which we should paint.
*/
public final void paintValue (final Graphics gfx, final Rectangle box)
{
final Graphics2D g2 = (Graphics2D) gfx.create();
g2.setPaint((Color) getValue());
g2.fill(box);
g2.setPaint(Color.black);
g2.draw(box);
}
/**
* Determines whether this property editor is paintable.
*
* @return True if the class will honor the paintValue method.
*/
public final boolean isPaintable ()
{
return true;
}
/**
* Set (or change) the object that is to be edited. Primitive types such as "int" must
* be wrapped as the corresponding object type such as "java.lang.Integer".
*
* @param value The new target object to be edited. Note that this object should not be
* modified by the PropertyEditor, rather the PropertyEditor should create
* a new object to hold any modified value.
*/
public final void setValue (final Object value)
{
super.setValue(value);
model.setCustomColor((Color) value);
}
/**
* This method is intended for use when generating Java code to set the value of the
* property. It should return a fragment of Java code that can be used to initialize a
* variable with the current property value.
* <p/>
* Example results are "2", "new Color(127,127,34)", "Color.orange", etc.
*
* @return A fragment of Java code representing an initializer for the current value.
*/
public final String getJavaInitializationString ()
{
return null;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -