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 044package org.jfree.layout; 045 046import java.awt.Component; 047import java.awt.Container; 048import java.awt.Dimension; 049import java.awt.Insets; 050import java.awt.LayoutManager; 051import 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 */ 059public 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}