All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jdesktop.swingx.JXHeader Maven / Gradle / Ivy

There is a newer version: 1.7.2
Show newest version
/*
 * $Id: JXHeader.java 4147 2012-02-01 17:13:24Z kschaefe $
 *
 * Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle,
 * Santa Clara, California 95054, U.S.A. All rights reserved.
 *
 * 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 */

package org.jdesktop.swingx;

import org.jdesktop.beans.JavaBean;
import org.jdesktop.swingx.plaf.HeaderAddon;
import org.jdesktop.swingx.plaf.HeaderUI;
import org.jdesktop.swingx.plaf.LookAndFeelAddons;

import javax.swing.Icon;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;

/**
 * 

JXHeader is a simple component consisting of a title, a description, * and an icon. An example of such a component can be seen on * Romain Guys ProgX website

* *

JXHeader is a simple component that is also sufficiently * configurable to be usable. The description area * accepts HTML conforming to version 3.2 of the HTML standard. The icon, title, * and description are all configurable. JXHeader itself extends * {@link JXPanel}, providing translucency and painting delegates.

* *

If I were to reconstruct the ui shown in the above screenshot, I might * do so like this:
*


 *      JXHeader header = new JXHeader();
 *      header.setTitle("Timing Framework Spline Editor");
 *      header.setDescription("Drag control points in the display to change the " +
 *          "shape of the spline\n" +
 *          "Click the Copy Code button to generate the corresponding Java code.");
 *      Icon icon = new ImageIcon(getClass().getResource("tools.png"));
 *      header.setIcon(icon);
 * 
*

* Note: The HTML support doesn't exist yet. The UI delegate needs to discover whether * the text supplied is HTML or not, and change the content type of the editor pane * being used. The problem is that if "text/html" is always used, the font is wrong. * This same situation will be found in other parts of the code (JXErrorPane, for instance), * so this needs to be dealt with. * *

Defaults

*

BasicHeaderUI uses the following UI defaults: *

    *
  • Header.defaultIcon: The default icon to use when creating a new JXHeader.
  • *
* * @author rbair * @author rah003 */ @JavaBean public class JXHeader extends JXPanel { /** * SerialVersionUID. */ private static final long serialVersionUID = 3593838231433068954L; /** * JXHeader pluggable UI key HeaderUI */ public static final String uiClassID = "HeaderUI"; // ensure at least the default ui is registered static { LookAndFeelAddons.contribute(new HeaderAddon()); } /** * Specifies desired location of the icon relative to the title/description text. */ public enum IconPosition { /** * Positions icon left from the text. */ LEFT, /** * Positions icon right from the text. */ RIGHT } private String title; private String description; private Icon icon; private Font titleFont; private Font descriptionFont; private Color titleForeground; private Color descriptionForeground; private IconPosition iconPosition = IconPosition.RIGHT; /** * Creates a new instance of JXHeader */ public JXHeader() { } /** * Creates a new instance of JXHeader. PropertyChangeEvents are fired * when the title and description properties are set. * * @param title specifies the title property for this JXHeader * @param description specifies the description property for this JXHeader */ public JXHeader(String title, String description) { this(title, description, null); } /** * Creates a new instance of JXHeader. PropertyChangeEvents are fired * when the title and description properties are set. * * @param title specifies the title property for this JXHeader * @param description specifies the description property for this JXHeader * @param icon specifies the icon property for this JXHeader */ public JXHeader(String title, String description, Icon icon) { setTitle(title); setDescription(description); setIcon(icon); } //------------------------------------------------------------- UI Logic /** * {@inheritDoc} */ @Override public HeaderUI getUI() { return (HeaderUI) super.getUI(); } /** * Sets the look and feel (L&F) object that renders this component. * * @param ui the HeaderUI L&F object * @see javax.swing.UIDefaults#getUI */ public void setUI(HeaderUI ui) { super.setUI(ui); } /** * Returns the name of the L&F class that renders this component. * * @return the string {@link #uiClassID} * @see javax.swing.JComponent#getUIClassID * @see javax.swing.UIDefaults#getUI */ @Override public String getUIClassID() { return uiClassID; } /** * Notification from the UIManager that the L&F has changed. * Replaces the current UI object with the latest version from the * UIManager. * * @see javax.swing.JComponent#updateUI */ @Override public void updateUI() { setUI((HeaderUI) LookAndFeelAddons.getUI(this, HeaderUI.class)); } /** * Sets the title to use. This may be either plain text, or a simplified * version of HTML, as JLabel would use. * * @param title the Title. May be null. */ public void setTitle(String title) { String old = getTitle(); this.title = title; firePropertyChange("title", old, getTitle()); } /** * Gets the title. This may use HTML, such as * that supported by JLabel (version 3.2 of the HTML spec). * * @return the title. May be null. */ public String getTitle() { return title; } /** * Sets the description for this header. This may use HTML, such as * that supported by JLabel (version 3.2 of the HTML spec). * * @param description the description. May be null, may be HTML or plain text. */ public void setDescription(String description) { String old = getDescription(); this.description = description; firePropertyChange("description", old, getDescription()); } /** * Gets the description. * * @return description */ public String getDescription() { return description; } /** * Sets the icon to use for the header. It is generally recommended that this * be an image 64x64 pixels in size, and that the icon have no gaps at the top. * * @param icon may be null */ public void setIcon(Icon icon) { Icon old = getIcon(); this.icon = icon; firePropertyChange("icon", old, getIcon()); } /** * Gets the icon. * * @return the Icon being used. May be null. */ public Icon getIcon() { return icon; } /** * Sets new font for both, title and description line of the header. * * @see javax.swing.JComponent#setFont(Font) */ @Override public void setFont(Font font) { super.setFont(font); setTitleFont(font); setDescriptionFont(font); } /** * Sets new font for title. * * @param font New title font. */ public void setTitleFont(Font font) { Font old = getTitleFont(); this.titleFont = font; firePropertyChange("titleFont", old, getTitleFont()); } /** * Gets title font. * * @return the Font being used. May be null. */ public Font getTitleFont() { return titleFont; } /** * Sets font for the description line of header. * * @param font New description font. */ public void setDescriptionFont(Font font) { Font old = getDescriptionFont(); this.descriptionFont = font; firePropertyChange("descriptionFont", old, getDescriptionFont()); } /** * Gets description font. * * @return the Font being used. May be null. */ public Font getDescriptionFont() { return descriptionFont; } /** * Gets current title foreground color. * * @return the Color used to paint title. May be null. */ public Color getTitleForeground() { return titleForeground; } /** * Sets title foreground color. * * @param titleForeground the Color to be used to paint title. */ public void setTitleForeground(Color titleForeground) { Color old = getTitleForeground(); this.titleForeground = titleForeground; firePropertyChange("titleForeground", old, getTitleForeground()); } /** * Gets current description foreground color. * * @return the Color used to paint description. May be null. */ public Color getDescriptionForeground() { return descriptionForeground; } /** * Sets description foreground color. * * @param descriptionForeground the Color to be used to paint description. */ public void setDescriptionForeground(Color descriptionForeground) { Color old = getDescriptionForeground(); this.descriptionForeground = descriptionForeground; firePropertyChange("descriptionForeground", old, getDescriptionForeground()); } /** * Gets current icon position. Default is RIGHT. * * @return Current Icon position. */ public IconPosition getIconPosition() { return iconPosition; } /** * Sets new Icon position. Position is relative to the text. Default value is RIGHT. * * @param iconPosition new desired icon position * @see #getIconPosition() */ public void setIconPosition(IconPosition iconPosition) { IconPosition old = getIconPosition(); this.iconPosition = iconPosition; firePropertyChange("iconPosition", old, getIconPosition()); } @Override public Dimension getPreferredSize() { Dimension s = super.getPreferredSize(); // TODO: hack for JXLabel issue ... see JXHeaderVisualCheck.interactiveCustomProperties(); s.width += 5; return s; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy