All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.jgoodies.forms.builder.ButtonStackBuilder Maven / Gradle / Ivy

Go to download

The JGoodies Forms framework helps you lay out and implement elegant Swing panels quickly and consistently. It makes simple things easy and the hard stuff possible, the good design easy and the bad difficult.

There is a newer version: 1.9.0
Show newest version
/*
 * Copyright (c) 2002-2014 JGoodies Software GmbH. 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 Software GmbH 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.builder;

import static com.jgoodies.common.base.Preconditions.checkNotNull;

import java.awt.Color;

import javax.swing.Action;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.border.Border;

import com.jgoodies.forms.layout.ColumnSpec;
import com.jgoodies.forms.layout.ConstantSize;
import com.jgoodies.forms.layout.FormLayout;
import com.jgoodies.forms.layout.FormSpec;
import com.jgoodies.forms.layout.FormSpecs;
import com.jgoodies.forms.layout.RowSpec;
import com.jgoodies.forms.util.LayoutStyle;

/**
 * Builds consistent button stacks that comply with popular style guides.
 * Utilizes the JGoodies {@link FormLayout} and honors the platform's
 * {@link LayoutStyle} regarding button sizes, and gaps.

* * This builder sets a hint for narrow margin for the gridded buttons. * This can reduce the button stack's width if some buttons have long texts. * For example, a stack with 'OK', 'Cancel', 'Configure…' will likely * exceed the minimum button width. The narrow margins help getting narrow * stacks. * Note that some look&feels do not support the narrow margin feature, * and conversely, others have only narrow margins. The JGoodies look&feels * honor the setting, the Mac Aqua l&f uses narrow margins all the time.

* * Example:
* The following example builds a button stack with Close, Up and * Down, where Up and Down are related, and Close is not related * to the other buttons, which makes a wide gap for the unrelated and * a smaller gap for the related buttons. *

 * private JPanel createCloseUpDownButtonStack(
 *         JButton close, JButton up, JButton down) {
 *     return ButtonStackBuilder().create()
 *     		.addGridded(close)
 *     		.addUnrelatedGap()
 *     		.addGridded(up)
 *     		.addRelatedGap()
 *     		.addGridded(down)
 *     		.build();
 * }
 * 
* * @author Karsten Lentzsch * @version $Revision: 1.15 $ * * @see ButtonBarBuilder * @see com.jgoodies.forms.util.LayoutStyle */ public final class ButtonStackBuilder extends AbstractButtonPanelBuilder { /** * Specifies the FormLayout's the single button stack column. */ private static final ColumnSpec[] COL_SPECS = new ColumnSpec[] { FormSpecs.BUTTON_COLSPEC }; /** * Specifies the rows of the initial FormLayout used in constructors. */ private static final RowSpec[] ROW_SPECS = new RowSpec[]{}; // Instance Creation **************************************************** /** * Constructs a ButtonStackBuilder on a default JPanel * using a pre-configured FormLayout as layout manager. */ public ButtonStackBuilder() { this(new JPanel(null)); } /** * Constructs a ButtonStackBuilder on the given panel * using a pre-configured FormLayout as layout manager. * * @param panel the layout container */ public ButtonStackBuilder(JPanel panel) { super(new FormLayout(COL_SPECS, ROW_SPECS), panel); } /** * Creates and returns an empty ButtonStackBuilder. * * @return the created builder * @since 1.8 */ public static ButtonStackBuilder create() { return new ButtonStackBuilder(); } // Adding Components **************************************************** /** * Adds a button component that has a minimum width * specified by the {@link LayoutStyle#getDefaultButtonWidth()}.

* * Although a JButton is expected, any JComponent is accepted * to allow custom button component types. * * @param button the component to add * * @return this builder * * @throws NullPointerException if {@code button} is {@code null} */ @Override public ButtonStackBuilder addButton(JComponent button) { checkNotNull(button, "The button must not be null."); getLayout().appendRow(FormSpecs.PREF_ROWSPEC); add(button); nextRow(); return this; } @Override public ButtonStackBuilder addButton(JComponent... buttons) { super.addButton(buttons); return this; } // Convenience Methods *************************************************** @Override public ButtonStackBuilder addButton(Action... actions) { super.addButton(actions); return this; } /** * Adds a fixed size component. * * @param component the component to add */ public ButtonStackBuilder addFixed(JComponent component) { getLayout().appendRow(FormSpecs.PREF_ROWSPEC); add(component); nextRow(); return this; } // Spacing **************************************************************** /** * Adds a glue that will be given the extra space, * if this box is larger than its preferred size. */ public ButtonStackBuilder addGlue() { appendGlueRow(); nextRow(); return this; } @Override public ButtonStackBuilder addRelatedGap() { appendRelatedComponentsGapRow(); nextRow(); return this; } @Override public ButtonStackBuilder addUnrelatedGap() { appendUnrelatedComponentsGapRow(); nextRow(); return this; } /** * Adds a strut of a specified size. * * @param size a constant that describes the gap */ public ButtonStackBuilder addStrut(ConstantSize size) { getLayout().appendRow(new RowSpec(RowSpec.TOP, size, FormSpec.NO_GROW)); nextRow(); return this; } // Configuration ********************************************************** @Override public ButtonStackBuilder background(Color background) { super.background(background); return this; } @Override public ButtonStackBuilder border(Border border) { super.border(border); return this; } @Override public ButtonStackBuilder opaque(boolean b) { super.opaque(b); return this; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy