001: /*
002: * Copyright (c) 2001-2006 JGoodies Karsten Lentzsch. All Rights Reserved.
003: *
004: * Redistribution and use in source and binary forms, with or without
005: * modification, are permitted provided that the following conditions are met:
006: *
007: * o Redistributions of source code must retain the above copyright notice,
008: * this list of conditions and the following disclaimer.
009: *
010: * o Redistributions in binary form must reproduce the above copyright notice,
011: * this list of conditions and the following disclaimer in the documentation
012: * and/or other materials provided with the distribution.
013: *
014: * o Neither the name of JGoodies Karsten Lentzsch nor the names of
015: * its contributors may be used to endorse or promote products derived
016: * from this software without specific prior written permission.
017: *
018: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
019: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
020: * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
021: * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
022: * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
023: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
024: * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
025: * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
026: * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
027: * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
028: * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
029: */
030:
031: package com.jgoodies.animation.tutorial.panel;
032:
033: import java.awt.Color;
034:
035: import javax.swing.JComponent;
036: import javax.swing.JPanel;
037:
038: import com.jgoodies.animation.renderer.BasicTextRenderer;
039: import com.jgoodies.forms.layout.CellConstraints;
040: import com.jgoodies.forms.layout.FormLayout;
041: import com.jgoodies.forms.layout.RowSpec;
042: import com.jgoodies.forms.layout.Sizes;
043:
044: /**
045: * A Swing component that consists of a top, center, bottom separated
046: * by horizontal bars. These bars can be moved up and down.
047: *
048: * @author Karsten Lentzsch
049: * @version $Revision: 1.4 $
050: *
051: * @see BasicTextRenderer
052: */
053: public final class HorizontalBarsPanel extends JPanel {
054:
055: // Names of the bound bean properties *************************************
056:
057: public static final String PROPERTYNAME_COLOR = "color";
058: public static final String PROPERTYNAME_FRACTION = "fraction";
059:
060: private double fraction;
061:
062: // Instance Creation ******************************************************
063:
064: /**
065: * Constructs a panel with horizontal bars and
066: * the given component in its center.
067: *
068: * @param centerComponent the component in the panel's center
069: */
070: public HorizontalBarsPanel(JComponent centerComponent) {
071: this (null, centerComponent, null);
072: }
073:
074: /**
075: * Constructs a panel with horizontal bars and
076: * the given component in its center.
077: *
078: * @param topComponent the component in the panel's top
079: * @param centerComponent the component in the panel's center
080: * @param bottomComponent the component in the panel's bottom
081: */
082: public HorizontalBarsPanel(JComponent topComponent,
083: JComponent centerComponent, JComponent bottomComponent) {
084: super (new FormLayout("fill:pref:grow",
085: "fill:0:grow, 6dlu, fill:0:grow, 6dlu, fill:0:grow"));
086: CellConstraints cc = new CellConstraints();
087: if (topComponent != null) {
088: add(topComponent, cc.xy(1, 1));
089: }
090: add(createFiller(), cc.xy(1, 2));
091: add(centerComponent, cc.xy(1, 3));
092: add(createFiller(), cc.xy(1, 4));
093: if (bottomComponent != null) {
094: add(bottomComponent, cc.xy(1, 5));
095: }
096: setFraction(0.45);
097: }
098:
099: // Public Accessors *******************************************************
100:
101: public double getFraction() {
102: return fraction;
103: }
104:
105: public void setFraction(double newFraction) {
106: double oldFraction = getFraction();
107: fraction = newFraction;
108: getFormLayout().setRowSpec(1, createOuterRowSpec(newFraction));
109: getFormLayout().setRowSpec(3, createCenterRowSpec(newFraction));
110: getFormLayout().setRowSpec(5, createOuterRowSpec(newFraction));
111: firePropertyChange(PROPERTYNAME_FRACTION, oldFraction,
112: newFraction);
113: revalidate();
114: repaint();
115: }
116:
117: // Helper Code ************************************************************
118:
119: private JComponent createFiller() {
120: JPanel bar = new JPanel(null);
121: bar.setBackground(Color.GRAY);
122: return bar;
123: }
124:
125: private FormLayout getFormLayout() {
126: return (FormLayout) getLayout();
127: }
128:
129: private RowSpec createOuterRowSpec(double aFraction) {
130: return new RowSpec(RowSpec.FILL, Sizes.ZERO, aFraction);
131: }
132:
133: private RowSpec createCenterRowSpec(double aFraction) {
134: return new RowSpec(RowSpec.FILL, Sizes.ZERO, 1.0d - aFraction);
135: }
136:
137: }
|