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

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

/*
 * $Id: JXTitledPanel.java 3471 2009-08-27 13:10:39Z kleopatra $
 *
 * 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 java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;

import javax.swing.BorderFactory;
import javax.swing.JComponent;

import org.jdesktop.swingx.painter.Painter;
import org.jdesktop.swingx.plaf.LookAndFeelAddons;
import org.jdesktop.swingx.plaf.TitledPanelAddon;
import org.jdesktop.swingx.plaf.TitledPanelUI;

/**
 * A special type of Panel that has a Title section and a Content section.
* The following properties can be set with the UIManager to change the look * and feel of the JXTitledPanel: *
    *
  • JXTitledPanel.titleForeground
  • *
  • JXTitledPanel.titleBackground
  • *
  • JXTitledPanel.titleFont
  • *
  • JXTitledPanel.titlePainter
  • *
  • JXTitledPanel.captionInsets
  • *
  • JXTitledPanel.rightDecorationInsets
  • *
  • JXTitledPanel.leftDecorationInsets
  • *
* * @author Richard Bair * @author Nicola Ken Barozzi * @author Jeanette Winzenburg */ public class JXTitledPanel extends JXPanel { /** * @see #getUIClassID // * * @see #readObject */ static public final String uiClassID = "TitledPanelUI"; public static final String LEFT_DECORATION = "JXTitledPanel.leftDecoration"; public static final String RIGHT_DECORATION = "JXTitledPanel.rightDecoration"; /** * Initialization that would ideally be moved into various look and feel * classes. */ static { LookAndFeelAddons.contribute(new TitledPanelAddon()); } /** * The text to use for the title */ private String title = ""; /** * The Font to use for the Title */ private Font titleFont; /** * The foreground color to use for the Title (particularly for the text) */ private Color titleForeground; /** * The ContentPanel. Whatever this container is will be displayed in the * Content section */ private Container contentPanel; /** * The Painter to use for painting the title section of the JXTitledPanel */ private Painter titlePainter; /** * Create a new JTitledPanel with an empty string for the title. */ public JXTitledPanel() { this(" "); } /** * Create a new JTitledPanel with the given title as the title for the * panel. * * @param title */ public JXTitledPanel(String title) { this(title, createDefaultContainer()); } /** * Create a new JTitledPanel with the given String as the title, and the * given Container as the content panel. * * @param title * @param content */ public JXTitledPanel(String title, Container content) { setTitle(title); setContentContainer(content); } /** * Returns the look and feel (L&F) object that renders this component. * * @return the TitledPanelUI object that renders this component */ @Override public TitledPanelUI getUI() { return (TitledPanelUI) ui; } /** * Sets the look and feel (L&F) object that renders this component. * * @param ui * the TitledPanelUI L&F object * @see javax.swing.UIDefaults#getUI * @beaninfo bound: true * hidden: true attribute: visualUpdate true * description: The UI object that implements the Component's LookAndFeel. */ public void setUI(TitledPanelUI ui) { super.setUI(ui); } /** * Returns a string that specifies the name of the L&F class that renders * this component. * * @return "TitledPanelUI" * @see JComponent#getUIClassID * @see javax.swing.UIDefaults#getUI * @beaninfo expert: true * description: A string that specifies the name of the L&F class. */ @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((TitledPanelUI) LookAndFeelAddons .getUI(this, TitledPanelUI.class)); } /** * Gets the title for this titled panel. * * @return the currently displayed title */ public String getTitle() { return title; } /** * Sets the title for this title panel. * * @param title * the title to display */ public void setTitle(String title) { String oldTitle = this.title; this.title = (title == null ? "" : title); // JW: fix swingx #9 - missing/incorrect notification // let standard notification handle // NOTE - "getting" the new property in the fire method is // intentional: there's no way of missing any transformations // on the parameter to set (like above: setting a // value depending on whether the input is null). firePropertyChange("title", oldTitle, getTitle()); } public Container getContentContainer() { if (contentPanel == null) { contentPanel = new JXPanel(); ((JXPanel) contentPanel).setBorder(BorderFactory .createEmptyBorder()); this.add(contentPanel, BorderLayout.CENTER); } return contentPanel; } public void setContentContainer(Container contentPanel) { if (this.contentPanel != null) { remove(this.contentPanel); } add(contentPanel, BorderLayout.CENTER); this.contentPanel = contentPanel; } /** * Adds the given JComponent as a decoration on the right of the title * * @param decoration */ public void setRightDecoration(JComponent decoration) { JComponent old = getRightDecoration(); getUI().setRightDecoration(decoration); firePropertyChange("rightDecoration", old, getRightDecoration()); } public JComponent getRightDecoration() { return getUI().getRightDecoration(); } /** * Adds the given JComponent as a decoration on the left of the title * * @param decoration */ public void setLeftDecoration(JComponent decoration) { JComponent old = getLeftDecoration(); getUI().setLeftDecoration(decoration); firePropertyChange("leftDecoration", old, getLeftDecoration()); } public JComponent getLeftDecoration() { return getUI().getLeftDecoration(); } public Font getTitleFont() { return titleFont; } public void setTitleFont(Font titleFont) { Font old = getTitleFont(); this.titleFont = titleFont; firePropertyChange("titleFont", old, getTitleFont()); } /** * Set the Painter to use for painting the title section of the JXTitledPanel. * This value may be null, which will cause the current look and feel to paint * an appropriate look * * @param p The Painter to use. May be null */ public void setTitlePainter(Painter p) { Painter old = getTitlePainter(); this.titlePainter = p; firePropertyChange("titlePainter", old, getTitlePainter()); } /** * @return the Painter to use for painting the background of the title section */ public Painter getTitlePainter() { return titlePainter; } public Color getTitleForeground() { return titleForeground; } public void setTitleForeground(Color titleForeground) { Color old = getTitleForeground(); this.titleForeground = titleForeground; firePropertyChange("titleForeground", old, getTitleForeground()); } private static Container createDefaultContainer() { //TODO: All this default container creation stuff should be in the UI //delegate. Not enough time at the moment for me to do this right. JXPanel p = new JXPanel(); p.setOpaque(false); return p; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy