001 /* ========================================================================
002 * JCommon : a free general purpose class library for the Java(tm) platform
003 * ========================================================================
004 *
005 * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors.
006 *
007 * Project Info: http://www.jfree.org/jcommon/index.html
008 *
009 * This library is free software; you can redistribute it and/or modify it
010 * under the terms of the GNU Lesser General Public License as published by
011 * the Free Software Foundation; either version 2.1 of the License, or
012 * (at your option) any later version.
013 *
014 * This library is distributed in the hope that it will be useful, but
015 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
016 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
017 * License for more details.
018 *
019 * You should have received a copy of the GNU Lesser General Public
020 * License along with this library; if not, write to the Free Software
021 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
022 * USA.
023 *
024 * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
025 * in the United States and other countries.]
026 *
027 * -----------------
028 * CenterLayout.java
029 * -----------------
030 * (C) Copyright 2000-2005, by Object Refinery Limited.
031 *
032 * Original Author: David Gilbert (for Object Refinery Limited);
033 * Contributor(s): -;
034 *
035 * $Id: CenterLayout.java,v 1.6 2005/11/16 15:58:40 taqua Exp $
036 *
037 * Changes (from 5-Nov-2001)
038 * -------------------------
039 * 05-Nov-2001 : Changed package to com.jrefinery.layout.* (DG);
040 * 10-Oct-2002 : Fixed errors reported by Checkstyle (DG);
041 *
042 */
043
044 package org.jfree.layout;
045
046 import java.awt.Component;
047 import java.awt.Container;
048 import java.awt.Dimension;
049 import java.awt.Insets;
050 import java.awt.LayoutManager;
051 import java.io.Serializable;
052
053 /**
054 * A layout manager that displays a single component in the center of its
055 * container.
056 *
057 * @author David Gilbert
058 */
059 public class CenterLayout implements LayoutManager, Serializable {
060
061 /** For serialization. */
062 private static final long serialVersionUID = 469319532333015042L;
063
064 /**
065 * Creates a new layout manager.
066 */
067 public CenterLayout() {
068 }
069
070 /**
071 * Returns the preferred size.
072 *
073 * @param parent the parent.
074 *
075 * @return the preferred size.
076 */
077 public Dimension preferredLayoutSize(final Container parent) {
078
079 synchronized (parent.getTreeLock()) {
080 final Insets insets = parent.getInsets();
081 if (parent.getComponentCount() > 0) {
082 final Component component = parent.getComponent(0);
083 final Dimension d = component.getPreferredSize();
084 return new Dimension(
085 (int) d.getWidth() + insets.left + insets.right,
086 (int) d.getHeight() + insets.top + insets.bottom
087 );
088 }
089 else {
090 return new Dimension(
091 insets.left + insets.right, insets.top + insets.bottom
092 );
093 }
094 }
095
096 }
097
098 /**
099 * Returns the minimum size.
100 *
101 * @param parent the parent.
102 *
103 * @return the minimum size.
104 */
105 public Dimension minimumLayoutSize(final Container parent) {
106
107 synchronized (parent.getTreeLock()) {
108 final Insets insets = parent.getInsets();
109 if (parent.getComponentCount() > 0) {
110 final Component component = parent.getComponent(0);
111 final Dimension d = component.getMinimumSize();
112 return new Dimension(d.width + insets.left + insets.right,
113 d.height + insets.top + insets.bottom);
114 }
115 else {
116 return new Dimension(insets.left + insets.right,
117 insets.top + insets.bottom);
118 }
119 }
120
121 }
122
123 /**
124 * Lays out the components.
125 *
126 * @param parent the parent.
127 */
128 public void layoutContainer(final Container parent) {
129
130 synchronized (parent.getTreeLock()) {
131 if (parent.getComponentCount() > 0) {
132 final Insets insets = parent.getInsets();
133 final Dimension parentSize = parent.getSize();
134 final Component component = parent.getComponent(0);
135 final Dimension componentSize = component.getPreferredSize();
136 final int xx = insets.left + (
137 Math.max((parentSize.width - insets.left - insets.right
138 - componentSize.width) / 2, 0)
139 );
140 final int yy = insets.top + (
141 Math.max((parentSize.height - insets.top - insets.bottom
142 - componentSize.height) / 2, 0));
143 component.setBounds(xx, yy, componentSize.width,
144 componentSize.height);
145 }
146 }
147
148 }
149
150 /**
151 * Not used.
152 *
153 * @param comp the component.
154 */
155 public void addLayoutComponent(final Component comp) {
156 // not used.
157 }
158
159 /**
160 * Not used.
161 *
162 * @param comp the component.
163 */
164 public void removeLayoutComponent(final Component comp) {
165 // not used
166 }
167
168 /**
169 * Not used.
170 *
171 * @param name the component name.
172 * @param comp the component.
173 */
174 public void addLayoutComponent(final String name, final Component comp) {
175 // not used
176 }
177
178 /**
179 * Not used.
180 *
181 * @param name the component name.
182 * @param comp the component.
183 */
184 public void removeLayoutComponent(final String name, final Component comp) {
185 // not used
186 }
187
188 }