| /* Box.java -- |
| Copyright (C) 2002, 2004 Free Software Foundation, Inc. |
| |
| This file is part of GNU Classpath. |
| |
| GNU Classpath is free software; you can redistribute it and/or modify |
| it under the terms of the GNU General Public License as published by |
| the Free Software Foundation; either version 2, or (at your option) |
| any later version. |
| |
| GNU Classpath is distributed in the hope that it will be useful, but |
| WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| General Public License for more details. |
| |
| You should have received a copy of the GNU General Public License |
| along with GNU Classpath; see the file COPYING. If not, write to the |
| Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA |
| 02110-1301 USA. |
| |
| Linking this library statically or dynamically with other modules is |
| making a combined work based on this library. Thus, the terms and |
| conditions of the GNU General Public License cover the whole |
| combination. |
| |
| As a special exception, the copyright holders of this library give you |
| permission to link this library with independent modules to produce an |
| executable, regardless of the license terms of these independent |
| modules, and to copy and distribute the resulting executable under |
| terms of your choice, provided that you also meet, for each linked |
| independent module, the terms and conditions of the license of that |
| module. An independent module is a module which is not derived from |
| or based on this library. If you modify this library, you may extend |
| this exception to your version of the library, but you are not |
| obligated to do so. If you do not wish to do so, delete this |
| exception statement from your version. */ |
| |
| |
| package javax.swing; |
| |
| import java.awt.AWTError; |
| import java.awt.Component; |
| import java.awt.Container; |
| import java.awt.Dimension; |
| import java.awt.LayoutManager; |
| |
| import javax.accessibility.Accessible; |
| import javax.accessibility.AccessibleContext; |
| import javax.accessibility.AccessibleRole; |
| |
| /** |
| * A component that uses a {@link BoxLayout} as Layout Manager. |
| * |
| * In addition to that, this class provides a set of static methods for |
| * creating some filler components ('struts' and 'glue') for use in |
| * containers that are laid out using BoxLayout. |
| * |
| * @author Ronald Veldema (rveldema@cs.vu.nl) |
| */ |
| public class Box extends JComponent implements Accessible |
| { |
| private static final long serialVersionUID = 1525417495883046342L; |
| |
| /** |
| * Provides accessibility support for <code>Box</code>es. |
| */ |
| protected class AccessibleBox extends Container.AccessibleAWTContainer |
| { |
| private static final long serialVersionUID = -7775079816389931944L; |
| |
| protected AccessibleBox() |
| { |
| // Nothing to do here. |
| } |
| |
| public AccessibleRole getAccessibleRole() |
| { |
| return null; |
| } |
| } |
| |
| /** |
| * A component that servers as a filler in BoxLayout controlled containers. |
| */ |
| public static class Filler extends JComponent implements Accessible |
| { |
| private static final long serialVersionUID = -1204263191910183998L; |
| |
| /** |
| * Provides accessibility support for <code>Box.Filler</code>. |
| */ |
| protected class AccessibleBoxFiller |
| extends Component.AccessibleAWTComponent |
| { |
| private static final long serialVersionUID = 164963348357479321L; |
| |
| protected AccessibleBoxFiller() |
| { |
| // Nothing to do here. |
| } |
| |
| public AccessibleRole getAccessibleRole() |
| { |
| return null; |
| } |
| } |
| |
| private transient Dimension min, pref, max; |
| |
| /** |
| * Creates a new instance of Filler. |
| * |
| * @param min the minimum size of the filler. |
| * @param pref the preferred size of the filler. |
| * @param max the maximum size of the filler. |
| */ |
| public Filler(Dimension min, Dimension pref, Dimension max) |
| { |
| changeShape(min, pref, max); |
| } |
| |
| /** |
| * Changes the dimensions of this Filler. |
| * |
| * @param min the new minimum size of the filler. |
| * @param pref the new preferred size of the filler. |
| * @param max the new maximum size of the filler. |
| */ |
| public void changeShape(Dimension min, Dimension pref, Dimension max) |
| { |
| this.min = min; |
| this.pref = pref; |
| this.max = max; |
| } |
| |
| public AccessibleContext getAccessibleContext() |
| { |
| if (accessibleContext == null) |
| accessibleContext = new AccessibleBoxFiller(); |
| return accessibleContext; |
| } |
| |
| /** |
| * Returns the maximum size of this Filler. |
| * |
| * @return the maximum size of this Filler. |
| */ |
| public Dimension getMaximumSize() |
| { |
| return max; |
| } |
| |
| /** |
| * Returns the minimum size of this Filler. |
| * |
| * @return the minimum size of this Filler. |
| */ |
| public Dimension getMinimumSize() |
| { |
| return min; |
| } |
| |
| /** |
| * Returns the preferred size of this Filler. |
| * |
| * @return the preferred size of this Filler. |
| */ |
| public Dimension getPreferredSize() |
| { |
| return pref; |
| } |
| } |
| |
| /** |
| * Creates a new Box component, that lays out its children according |
| * to the <code>axis</code> parameter. |
| * |
| * @param axis the orientation of the BoxLayout. |
| * |
| * @see BoxLayout#X_AXIS |
| * @see BoxLayout#Y_AXIS |
| * @see BoxLayout#LINE_AXIS |
| * @see BoxLayout#PAGE_AXIS |
| */ |
| public Box(int axis) |
| { |
| super.setLayout(new BoxLayout(this, axis)); |
| } |
| |
| /** |
| * Creates a filler component which acts as glue between components. |
| * It does not take space unless some extra space is available. If extra |
| * space is available, this component can expand in both X and Y directions. |
| * |
| * @return a glue-like filler component. |
| */ |
| public static Component createGlue() |
| { |
| Filler glue = new Filler(new Dimension(0, 0), new Dimension(0, 0), |
| new Dimension(Short.MAX_VALUE, Short.MAX_VALUE)); |
| return glue; |
| } |
| |
| public static Box createHorizontalBox() |
| { |
| return new Box(BoxLayout.X_AXIS); |
| } |
| |
| /** |
| * Creates a filler component which acts as glue between components. |
| * It does not take space unless some extra space is available. If extra |
| * space is available, this component can expand in the X direction. |
| * |
| * @return a glue-like filler component. |
| */ |
| public static Component createHorizontalGlue() |
| { |
| Filler glue = new Filler(new Dimension(0, 0), new Dimension(0, 0), |
| new Dimension(Short.MAX_VALUE, 0)); |
| return glue; |
| } |
| |
| /** |
| * Creates a filler component which acts as strut between components. |
| * It will fill exactly the specified horizontal size. |
| * |
| * @param width the width of this strut in pixels. |
| * |
| * @return a strut-like filler component. |
| */ |
| public static Component createHorizontalStrut(int width) |
| { |
| Filler strut = new Filler(new Dimension(width, 0), |
| new Dimension(width, 0), |
| new Dimension(width, Integer.MAX_VALUE)); |
| return strut; |
| } |
| |
| public static Component createRigidArea(Dimension d) |
| { |
| return new Filler(d, d, d); |
| } |
| |
| public static Box createVerticalBox() |
| { |
| return new Box(BoxLayout.Y_AXIS); |
| } |
| |
| /** |
| * Creates a filler component which acts as glue between components. |
| * It does not take space unless some extra space is available. If extra |
| * space is available, this component can expand in the Y direction. |
| * |
| * @return a glue-like filler component. |
| */ |
| public static Component createVerticalGlue() |
| { |
| return createGlue(); |
| } |
| |
| /** |
| * Creates a filler component which acts as strut between components. |
| * It will fill exactly the specified vertical size. |
| * |
| * @param height the height of this strut in pixels. |
| * |
| * @return a strut-like filler component. |
| */ |
| public static Component createVerticalStrut(int height) |
| { |
| Filler strut = new Filler(new Dimension(0, height), |
| new Dimension(0, height), |
| new Dimension(Integer.MAX_VALUE, height)); |
| return strut; |
| } |
| |
| public void setLayout(LayoutManager l) |
| { |
| throw new AWTError("Not allowed to set layout managers for boxes."); |
| } |
| |
| public AccessibleContext getAccessibleContext() |
| { |
| if (accessibleContext == null) |
| accessibleContext = new AccessibleBox(); |
| return accessibleContext; |
| } |
| |
| |
| } |