Java tutorial
/* * $Id: DividerLayout.java,v 1.1.1.1 2005/04/07 18:36:20 pocho Exp $ */ // Revised from javautils swing; import java.awt.Component; import java.awt.Container; import java.awt.Dimension; import java.awt.Insets; import java.awt.LayoutManager2; import java.awt.Rectangle; /** * <p> * <code>DividerLayout</code> is layout that divides two components with the * column of actions. It is especially usefull for components that contains * two lists of elements and buttons for transfering elements between these * two lists. * </p> * <p> * Components are indicated as {@link #WEST}, {@link #EAST} and {@link #CENTER}. * </p> * * @version $Name: $ - $Revision: 1.1.1.1 $ - $Date: 2005/04/07 18:36:20 $ * TODO Test */ public class DividerLayout implements LayoutManager2 { /** * Indicates west component */ public final static String WEST = "WEST"; /** * indicates east component */ public final static String EAST = "EAST"; /** * indicates center component */ public final static String CENTER = "CENTER"; /** * west component */ protected Component westComponent; /** * center component */ protected Component centerComponent; /** * east component */ protected Component eastComponent; /** * Adds a component to specified position. */ public void addLayoutComponent(Component comp, Object constraints) { if (WEST.equalsIgnoreCase((String) constraints)) { westComponent = comp; } else if (CENTER.equalsIgnoreCase((String) constraints)) { centerComponent = comp; } else if (EAST.equalsIgnoreCase((String) constraints)) { eastComponent = comp; } } /** * @see java.awt.LayoutManager2#maximumLayoutSize(java.awt.Container) */ public Dimension maximumLayoutSize(Container target) { Dimension size; int width = 0; int height = 0; if ((westComponent != null) && (westComponent.isVisible())) { size = westComponent.getMaximumSize(); width = Math.max(width, size.width); height = Math.max(height, size.height); } if ((eastComponent != null) && (eastComponent.isVisible())) { size = eastComponent.getMaximumSize(); width = Math.max(width, size.width); height = Math.max(height, size.height); } width *= 2; if ((centerComponent != null) && (centerComponent.isVisible())) { size = centerComponent.getPreferredSize(); width += size.width; height = Math.max(height, size.height); } return new Dimension(width, height); } /** * @see java.awt.LayoutManager2#getLayoutAlignmentX(java.awt.Container) */ public float getLayoutAlignmentX(Container target) { return 0.0f; } /** * @see java.awt.LayoutManager2#getLayoutAlignmentY(java.awt.Container) */ public float getLayoutAlignmentY(Container target) { return 0.0f; } /** * @see java.awt.LayoutManager2#invalidateLayout(java.awt.Container) */ public void invalidateLayout(Container target) { } /** * @see java.awt.LayoutManager#addLayoutComponent(java.lang.String, java.awt.Component) */ public void addLayoutComponent(String name, Component comp) { addLayoutComponent(comp, name); } /** * @see java.awt.LayoutManager#removeLayoutComponent(java.awt.Component) */ public void removeLayoutComponent(Component comp) { if (comp == westComponent) { westComponent = null; } else if (comp == centerComponent) { centerComponent = null; } else if (comp == eastComponent) { centerComponent = null; } } /** * @see java.awt.LayoutManager#preferredLayoutSize(java.awt.Container) */ public Dimension preferredLayoutSize(Container parent) { Dimension size; int width = 0; int height = 0; if ((westComponent != null) && (westComponent.isVisible())) { size = westComponent.getPreferredSize(); width = Math.max(width, size.width); height = Math.max(height, size.height); } if ((eastComponent != null) && (eastComponent.isVisible())) { size = eastComponent.getPreferredSize(); width = Math.max(width, size.width); height = Math.max(height, size.height); } width *= 2; if ((centerComponent != null) && (centerComponent.isVisible())) { size = centerComponent.getPreferredSize(); width += size.width; height = Math.max(height, size.height); } return new Dimension(width, height); } /** * @see java.awt.LayoutManager#minimumLayoutSize(java.awt.Container) */ public Dimension minimumLayoutSize(Container parent) { Dimension size; int width = 0; int height = 0; if ((westComponent != null) && (westComponent.isVisible())) { size = westComponent.getMinimumSize(); width = Math.max(width, size.width); height = Math.max(height, size.height); } if ((eastComponent != null) && (eastComponent.isVisible())) { size = eastComponent.getMinimumSize(); width = Math.max(width, size.width); height = Math.max(height, size.height); } width *= 2; if ((centerComponent != null) && (centerComponent.isVisible())) { size = centerComponent.getPreferredSize(); width += size.width; height += Math.max(height, size.height); } return new Dimension(width, height); } /** * @see java.awt.LayoutManager#layoutContainer(java.awt.Container) */ public void layoutContainer(Container container) { Insets insets = container.getInsets(); Dimension westSize = new Dimension(0, 0); Dimension centerSize = new Dimension(0, 0); Dimension eastSize = new Dimension(0, 0); Rectangle centerBounds = new Rectangle(0, 0, 0, 0); Dimension containerSize = container.getSize(); int centerX = containerSize.width / 2; int centerY = containerSize.height / 2; if ((centerComponent != null) && (centerComponent.isVisible())) { centerSize = centerComponent.getPreferredSize(); centerSize.width = Math.min(centerSize.width, containerSize.width - insets.left - insets.right); centerSize.height = Math.min(centerSize.height, containerSize.height - insets.top - insets.bottom); centerComponent.setBounds(centerX - (centerSize.width / 2), centerY - (centerSize.height / 2), centerSize.width, centerSize.height); centerBounds = centerComponent.getBounds(); } if ((westComponent != null) && (westComponent.isVisible())) { westSize = westComponent.getPreferredSize(); } if ((eastComponent != null) && (eastComponent.isVisible())) { eastSize = eastComponent.getPreferredSize(); } /* int maxWidth = Math.min(westSize.width, eastSize.width); maxWidth = Math.min(maxWidth, (containerSize.width - centerBounds.width - insets.left - insets.right) / 2);*/ int maxWidth = (containerSize.width - centerBounds.width - insets.left - insets.right) / 2; /* int maxHeight = Math.min(westSize.height, eastSize.height); maxHeight = Math.max(maxHeight, containerSize.height - insets.top - insets.bottom);*/ int maxHeight = containerSize.height - insets.top - insets.bottom; if (westComponent != null) { westComponent.setBounds(centerBounds.x - maxWidth, centerY - (maxHeight / 2), maxWidth, maxHeight); } if (eastComponent != null) { eastComponent.setBounds(centerBounds.x + centerBounds.width, centerY - (maxHeight / 2), maxWidth, maxHeight); } } }