| /* |
| * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. |
| * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
| * |
| * This code is free software; you can redistribute it and/or modify it |
| * under the terms of the GNU General Public License version 2 only, as |
| * published by the Free Software Foundation. Oracle designates this |
| * particular file as subject to the "Classpath" exception as provided |
| * by Oracle in the LICENSE file that accompanied this code. |
| * |
| * This code 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 |
| * version 2 for more details (a copy is included in the LICENSE file that |
| * accompanied this code). |
| * |
| * You should have received a copy of the GNU General Public License version |
| * 2 along with this work; if not, write to the Free Software Foundation, |
| * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
| * |
| * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
| * or visit www.oracle.com if you need additional information or have any |
| * questions. |
| */ |
| package javax.swing; |
| |
| import java.awt.Container; |
| import javax.swing.plaf.ComponentUI; |
| import sun.awt.AppContext; |
| |
| /** |
| * <code>LayoutStyle</code> provides information about how to position |
| * components. This class is primarily useful for visual tools and |
| * layout managers. Most developers will not need to use this class. |
| * <p> |
| * You typically don't set or create a |
| * <code>LayoutStyle</code>. Instead use the static method |
| * <code>getInstance</code> to obtain the current instance. |
| * |
| * @since 1.6 |
| */ |
| public abstract class LayoutStyle { |
| /** |
| * Sets the shared instance of <code>LayoutStyle</code>. Specifying |
| * <code>null</code> results in using the <code>LayoutStyle</code> from |
| * the current <code>LookAndFeel</code>. |
| * |
| * @param style the <code>LayoutStyle</code>, or <code>null</code> |
| * @see #getInstance |
| */ |
| public static void setInstance(LayoutStyle style) { |
| synchronized(LayoutStyle.class) { |
| if (style == null) { |
| AppContext.getAppContext().remove(LayoutStyle.class); |
| } |
| else { |
| AppContext.getAppContext().put(LayoutStyle.class, style); |
| } |
| } |
| } |
| |
| /** |
| * Returns the shared instance of <code>LayoutStyle</code>. If an instance |
| * has not been specified in <code>setInstance</code>, this will return |
| * the <code>LayoutStyle</code> from the current <code>LookAndFeel</code>. |
| * |
| * @see LookAndFeel#getLayoutStyle |
| * @return the shared instance of <code>LayoutStyle</code> |
| */ |
| public static LayoutStyle getInstance() { |
| LayoutStyle style; |
| synchronized(LayoutStyle.class) { |
| style = (LayoutStyle)AppContext.getAppContext(). |
| get(LayoutStyle.class); |
| } |
| if (style == null) { |
| return UIManager.getLookAndFeel().getLayoutStyle(); |
| } |
| return style; |
| } |
| |
| |
| /** |
| * <code>ComponentPlacement</code> is an enumeration of the |
| * possible ways two components can be placed relative to each |
| * other. <code>ComponentPlacement</code> is used by the |
| * <code>LayoutStyle</code> method <code>getPreferredGap</code>. Refer to |
| * <code>LayoutStyle</code> for more information. |
| * |
| * @see LayoutStyle#getPreferredGap(JComponent,JComponent, |
| * ComponentPlacement,int,Container) |
| * @since 1.6 |
| */ |
| public enum ComponentPlacement { |
| /** |
| * Enumeration value indicating the two components are |
| * visually related and will be placed in the same parent. |
| * For example, a <code>JLabel</code> providing a label for a |
| * <code>JTextField</code> is typically visually associated |
| * with the <code>JTextField</code>; the constant <code>RELATED</code> |
| * is used for this. |
| */ |
| RELATED, |
| |
| /** |
| * Enumeration value indicating the two components are |
| * visually unrelated and will be placed in the same parent. |
| * For example, groupings of components are usually visually |
| * separated; the constant <code>UNRELATED</code> is used for this. |
| */ |
| UNRELATED, |
| |
| /** |
| * Enumeration value indicating the distance to indent a component |
| * is being requested. For example, often times the children of |
| * a label will be horizontally indented from the label. To determine |
| * the preferred distance for such a gap use the |
| * <code>INDENT</code> type. |
| * <p> |
| * This value is typically only useful with a direction of |
| * <code>EAST</code> or <code>WEST</code>. |
| */ |
| INDENT; |
| } |
| |
| |
| /** |
| * Creates a new <code>LayoutStyle</code>. You generally don't |
| * create a <code>LayoutStyle</code>. Instead use the method |
| * <code>getInstance</code> to obtain the current |
| * <code>LayoutStyle</code>. |
| */ |
| public LayoutStyle() { |
| } |
| |
| /** |
| * Returns the amount of space to use between two components. |
| * The return value indicates the distance to place |
| * <code>component2</code> relative to <code>component1</code>. |
| * For example, the following returns the amount of space to place |
| * between <code>component2</code> and <code>component1</code> |
| * when <code>component2</code> is placed vertically above |
| * <code>component1</code>: |
| * <pre> |
| * int gap = getPreferredGap(component1, component2, |
| * ComponentPlacement.RELATED, |
| * SwingConstants.NORTH, parent); |
| * </pre> |
| * The <code>type</code> parameter indicates the relation between |
| * the two components. If the two components will be contained in |
| * the same parent and are showing similar logically related |
| * items, use <code>RELATED</code>. If the two components will be |
| * contained in the same parent but show logically unrelated items |
| * use <code>UNRELATED</code>. Some look and feels may not |
| * distinguish between the <code>RELATED</code> and |
| * <code>UNRELATED</code> types. |
| * <p> |
| * The return value is not intended to take into account the |
| * current size and position of <code>component2</code> or |
| * <code>component1</code>. The return value may take into |
| * consideration various properties of the components. For |
| * example, the space may vary based on font size, or the preferred |
| * size of the component. |
| * |
| * @param component1 the <code>JComponent</code> |
| * <code>component2</code> is being placed relative to |
| * @param component2 the <code>JComponent</code> being placed |
| * @param position the position <code>component2</code> is being placed |
| * relative to <code>component1</code>; one of |
| * <code>SwingConstants.NORTH</code>, |
| * <code>SwingConstants.SOUTH</code>, |
| * <code>SwingConstants.EAST</code> or |
| * <code>SwingConstants.WEST</code> |
| * @param type how the two components are being placed |
| * @param parent the parent of <code>component2</code>; this may differ |
| * from the actual parent and it may be <code>null</code> |
| * @return the amount of space to place between the two components |
| * @throws NullPointerException if <code>component1</code>, |
| * <code>component2</code> or <code>type</code> is |
| * <code>null</code> |
| * @throws IllegalArgumentException if <code>position</code> is not |
| * one of <code>SwingConstants.NORTH</code>, |
| * <code>SwingConstants.SOUTH</code>, |
| * <code>SwingConstants.EAST</code> or |
| * <code>SwingConstants.WEST</code> |
| * @see LookAndFeel#getLayoutStyle |
| * @since 1.6 |
| */ |
| public abstract int getPreferredGap(JComponent component1, |
| JComponent component2, |
| ComponentPlacement type, int position, |
| Container parent); |
| |
| /** |
| * Returns the amount of space to place between the component and specified |
| * edge of its parent. |
| * |
| * @param component the <code>JComponent</code> being positioned |
| * @param position the position <code>component</code> is being placed |
| * relative to its parent; one of |
| * <code>SwingConstants.NORTH</code>, |
| * <code>SwingConstants.SOUTH</code>, |
| * <code>SwingConstants.EAST</code> or |
| * <code>SwingConstants.WEST</code> |
| * @param parent the parent of <code>component</code>; this may differ |
| * from the actual parent and may be <code>null</code> |
| * @return the amount of space to place between the component and specified |
| * edge |
| * @throws IllegalArgumentException if <code>position</code> is not |
| * one of <code>SwingConstants.NORTH</code>, |
| * <code>SwingConstants.SOUTH</code>, |
| * <code>SwingConstants.EAST</code> or |
| * <code>SwingConstants.WEST</code> |
| */ |
| public abstract int getContainerGap(JComponent component, int position, |
| Container parent); |
| } |