JDK-6237199 : Ability to get preferred padding between components
  • Type: Enhancement
  • Component: client-libs
  • Sub-Component: javax.swing
  • Affected Version: 6
  • Priority: P3
  • Status: Resolved
  • Resolution: Fixed
  • OS: windows_xp
  • CPU: x86
  • Submitted: 2005-03-07
  • Updated: 2017-05-16
  • Resolved: 2005-09-20
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 6
6 b53Fixed
Description
Each look and feel has different guidelines as to how far components should be placed from each other.  In order to create a layout manager that fits in with the platform there should be API for getting this.
###@###.### 2005-03-07 23:34:36 GMT

Comments
EVALUATION This resulted in adding the new class javax.swing.LayoutStyle: /** * <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. * * @version 1.1, 09/12/05 * @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); /** * 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(); /** * <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); } And the following method to LookAndFeel (and it's subclasses): /** * Returns the <code>LayoutStyle</code> for this look * and feel. This will never return null. * <p> * You generally don't use the <code>LayoutStyle</code> from * the look and feel, instead use the <code>LayoutStyle</code> * method <code>getInstance</code>. * * @see LayoutStyle#getInstance * @return the <code>LayoutStyle</code> for this look and feel * @since 1.6 */ public LayoutStyle getLayoutStyle();
12-09-2005

EVALUATION Yes, this should be enabled. ###@###.### 2005-07-13 18:22:46 GMT
13-07-2005