/* * Copyright (c) 2002-2007 JGoodies Karsten Lentzsch. All Rights Reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * o Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * o Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * o Neither the name of JGoodies Karsten Lentzsch nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package com.jgoodies.forms.layout; import java.util.StringTokenizer; /** * Specifies columns in FormLayout by their default orientation, * start size and resizing behavior.<p> * * <strong>Examples:</strong><br> * The following examples specify a column with FILL alignment, a size of * 10 dlu that won't grow. * <pre> * new ColumnSpec(Sizes.dluX(10)); * new ColumnSpec(ColumnSpec.FILL, Sizes.dluX(10), 0.0); * new ColumnSpec(ColumnSpec.FILL, Sizes.dluX(10), ColumnSpec.NO_GROW); * new ColumnSpec("10dlu"); * new ColumnSpec("10dlu:0"); * new ColumnSpec("fill:10dlu:0"); * </pre><p> * * The {@link com.jgoodies.forms.factories.FormFactory} provides * predefined frequently used ColumnSpec instances. * * @author Karsten Lentzsch * @version $Revision$ * * @see com.jgoodies.forms.factories.FormFactory */ public final class ColumnSpec extends FormSpec { // Horizontal Orientations ********************************************* /** * By default put components in the left. */ public static final DefaultAlignment LEFT = FormSpec.LEFT_ALIGN; /** * By default put the components in the center. */ public static final DefaultAlignment CENTER = FormSpec.CENTER_ALIGN; /** * By default put components in the middle. */ public static final DefaultAlignment MIDDLE = CENTER; /** * By default put components in the right. */ public static final DefaultAlignment RIGHT = FormSpec.RIGHT_ALIGN; /** * By default fill the component into the column. */ public static final DefaultAlignment FILL = FormSpec.FILL_ALIGN; /** * Unless overridden the default alignment for a column is FILL. */ public static final DefaultAlignment DEFAULT = FILL; // Instance Creation **************************************************** /** * Constructs a ColumnSpec for the given default alignment, * size and resize weight.<p> * * The resize weight must be a non-negative double; you can use * <code>NO_GROW</code> as a convenience value for no resize. * * @param defaultAlignment the column's default alignment * @param size constant, component size or bounded size * @param resizeWeight the column's non-negative resize weight * @exception IllegalArgumentException if the size is invalid or * the resize weight is negative */ public ColumnSpec(DefaultAlignment defaultAlignment, Size size, double resizeWeight) { super(defaultAlignment, size, resizeWeight); } /** * Constructs a ColumnSpec for the given size using the * default alignment, and no resizing. * * @param size constant size, component size, or bounded size * @exception IllegalArgumentException if the size is invalid */ public ColumnSpec(Size size) { super(DEFAULT, size, NO_GROW); } /** * Constructs a ColumnSpec from the specified encoded description. * The description will be parsed to set initial values. * * @param encodedDescription the encoded description */ public ColumnSpec(String encodedDescription) { super(DEFAULT, encodedDescription); } // Implementing Abstract Behavior *************************************** /** * Returns if this is a horizontal specification (vs. vertical). * Used to distinct between horizontal and vertical dialog units, * which have different conversion factors. * * @return always true (for horizontal) */ protected final boolean isHorizontal() { return true; } // Parsing and Decoding of Column Descriptions ************************** /** * Parses and splits encoded column specifications and returns * an array of ColumnSpec objects. * * @param encodedColumnSpecs comma separated encoded column specifications * @return an array of decoded column specifications * @exception NullPointerException if the encoded column specifications string * is <code>null</code> * * @see ColumnSpec#ColumnSpec(String) */ public static ColumnSpec[] decodeSpecs(String encodedColumnSpecs) { if (encodedColumnSpecs == null) { throw new NullPointerException( "The column specification must not be null."); } StringTokenizer tokenizer = new StringTokenizer(encodedColumnSpecs, ", "); int columnCount = tokenizer.countTokens(); ColumnSpec[] columnSpecs = new ColumnSpec[columnCount]; for (int i = 0; i < columnCount; i++) { columnSpecs[i] = new ColumnSpec(tokenizer.nextToken()); } return columnSpecs; } }