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.ColumnSpec;
041: import com.jgoodies.forms.layout.FormLayout;
042: import com.jgoodies.forms.layout.Sizes;
043:
044: /**
045: * A Swing component that consists of three parts left, middle, right,
046: * separated by vertical bars. These bars can be moved via the bound
047: * bean property <em>fraction</em>.
048: *
049: * @author Karsten Lentzsch
050: * @version $Revision: 1.4 $
051: *
052: * @see BasicTextRenderer
053: */
054: public final class VerticalBarsPanel extends JPanel {
055:
056: // Names of the bound bean properties *************************************
057:
058: public static final String PROPERTYNAME_COLOR = "color";
059: public static final String PROPERTYNAME_FRACTION = "fraction";
060:
061: private double fraction;
062:
063: // Instance Creation ******************************************************
064:
065: /**
066: * Constructs a panel with horizontal bars and
067: * the given component in its center.
068: *
069: * @param middleComponent the component in the panel's center
070: */
071: public VerticalBarsPanel(JComponent middleComponent) {
072: this (null, middleComponent, null);
073: }
074:
075: /**
076: * Constructs a panel with horizontal bars and
077: * the given component in its center.
078: *
079: * @param leftComponent the component in the panel's top
080: * @param middleComponent the component in the panel's center
081: * @param rightComponent the component in the panel's bottom
082: */
083: public VerticalBarsPanel(JComponent leftComponent,
084: JComponent middleComponent, JComponent rightComponent) {
085: super (new FormLayout(
086: "fill:0:grow, 6dlu, fill:0:grow, 6dlu, fill:0:grow",
087: "fill:pref:grow"));
088: CellConstraints cc = new CellConstraints();
089: if (leftComponent != null) {
090: add(leftComponent, cc.xy(1, 1));
091: }
092: add(createFiller(), cc.xy(2, 1));
093: add(middleComponent, cc.xy(3, 1));
094: add(createFiller(), cc.xy(4, 1));
095: if (rightComponent != null) {
096: add(rightComponent, cc.xy(5, 1));
097: }
098: setFraction(0.45);
099: }
100:
101: // Public Accessors *******************************************************
102:
103: public double getFraction() {
104: return fraction;
105: }
106:
107: public void setFraction(double newFraction) {
108: double oldFraction = getFraction();
109: fraction = newFraction;
110: getFormLayout().setColumnSpec(1,
111: createOuterColumnSpec(newFraction));
112: getFormLayout().setColumnSpec(3,
113: createMiddleColumnSpec(newFraction));
114: getFormLayout().setColumnSpec(5,
115: createOuterColumnSpec(newFraction));
116: firePropertyChange(PROPERTYNAME_FRACTION, oldFraction,
117: newFraction);
118: revalidate();
119: repaint();
120: }
121:
122: // Helper Code ************************************************************
123:
124: private JComponent createFiller() {
125: JPanel bar = new JPanel(null);
126: bar.setBackground(Color.GRAY);
127: return bar;
128: }
129:
130: private FormLayout getFormLayout() {
131: return (FormLayout) getLayout();
132: }
133:
134: private ColumnSpec createOuterColumnSpec(double aFraction) {
135: return new ColumnSpec(ColumnSpec.FILL, Sizes.ZERO, aFraction);
136: }
137:
138: private ColumnSpec createMiddleColumnSpec(double aFraction) {
139: return new ColumnSpec(ColumnSpec.FILL, Sizes.ZERO,
140: 1.0d - aFraction);
141: }
142:
143: }
|