001 /*
002 * $Id: VerticalLayout.java 542 2005-10-10 18:03:15Z rbair $
003 *
004 * Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle,
005 * Santa Clara, California 95054, U.S.A. All rights reserved.
006 *
007 * This library is free software; you can redistribute it and/or
008 * modify it under the terms of the GNU Lesser General Public
009 * License as published by the Free Software Foundation; either
010 * version 2.1 of the License, or (at your option) any later version.
011 *
012 * This library is distributed in the hope that it will be useful,
013 * but WITHOUT ANY WARRANTY; without even the implied warranty of
014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015 * Lesser General Public License for more details.
016 *
017 * You should have received a copy of the GNU Lesser General Public
018 * License along with this library; if not, write to the Free Software
019 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
020 */
021 package org.jdesktop.swingx;
022
023 import java.awt.Component;
024 import java.awt.Container;
025 import java.awt.Dimension;
026 import java.awt.Insets;
027 import java.awt.LayoutManager2;
028
029 /**
030 * Organizes components in a vertical layout.
031 *
032 * @author fred
033 */
034 public class VerticalLayout implements LayoutManager2 {
035
036 private int gap = 0;
037
038 public VerticalLayout() {}
039
040 public VerticalLayout(int gap) {
041 this.gap = gap;
042 }
043
044 public int getGap() {
045 return gap;
046 }
047
048 public void setGap(int gap) {
049 this.gap = gap;
050 }
051
052 public void addLayoutComponent(String name, Component c) {}
053
054 public void layoutContainer(Container parent) {
055 Insets insets = parent.getInsets();
056 Dimension size = parent.getSize();
057 int width = size.width - insets.left - insets.right;
058 int height = insets.top;
059
060 for (int i = 0, c = parent.getComponentCount(); i < c; i++) {
061 Component m = parent.getComponent(i);
062 if (m.isVisible()) {
063 m.setBounds(insets.left, height, width, m.getPreferredSize().height);
064 height += m.getSize().height + gap;
065 }
066 }
067 }
068
069 public Dimension minimumLayoutSize(Container parent) {
070 return preferredLayoutSize(parent);
071 }
072
073 public Dimension preferredLayoutSize(Container parent) {
074 Insets insets = parent.getInsets();
075 Dimension pref = new Dimension(0, 0);
076
077 for (int i = 0, c = parent.getComponentCount(); i < c; i++) {
078 Component m = parent.getComponent(i);
079 if (m.isVisible()) {
080 Dimension componentPreferredSize =
081 parent.getComponent(i).getPreferredSize();
082 pref.height += componentPreferredSize.height + gap;
083 pref.width = Math.max(pref.width, componentPreferredSize.width);
084 }
085 }
086
087 pref.width += insets.left + insets.right;
088 pref.height += insets.top + insets.bottom;
089
090 return pref;
091 }
092
093 public void removeLayoutComponent(Component c) {}
094
095 @Override
096 public void addLayoutComponent(Component comp, Object constraints) {
097 }
098
099 @Override
100 public float getLayoutAlignmentX(Container target) {
101 return target.getAlignmentX();
102 }
103
104 @Override
105 public float getLayoutAlignmentY(Container target) {
106 return target.getAlignmentY();
107 }
108
109 @Override
110 public void invalidateLayout(Container target) {
111 }
112
113 @Override
114 public Dimension maximumLayoutSize(Container target) {
115 return preferredLayoutSize(target);
116 }
117
118 }