/* * 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.factories; import javax.swing.JButton; import javax.swing.JPanel; import com.jgoodies.forms.builder.ButtonBarBuilder; /** * A factory class that consists only of static methods to build frequently used * button bars. Utilizes the {@link com.jgoodies.forms.builder.ButtonBarBuilder} * that in turn uses the {@link com.jgoodies.forms.layout.FormLayout} * to lay out the bars.<p> * * The button bars returned by this builder comply with popular UI style guides. * * @author Karsten Lentzsch * @version $Revision$ * * @see com.jgoodies.forms.builder.ButtonBarBuilder * @see com.jgoodies.forms.util.LayoutStyle */ public final class ButtonBarFactory { private ButtonBarFactory() { // Suppresses default constructor, ensuring non-instantiability. } // General Purpose Factory Methods: Left Aligned ************************ /** * Builds and returns a left aligned bar with one button. * * @param button1 the first button to add * @return a button bar with the given button */ public static JPanel buildLeftAlignedBar(JButton button1) { return buildLeftAlignedBar(new JButton[] { button1 }); } /** * Builds and returns a left aligned bar with two buttons. * * @param button1 the first button to add * @param button2 the second button to add * @return a button bar with the given buttons */ public static JPanel buildLeftAlignedBar(JButton button1, JButton button2) { return buildLeftAlignedBar(new JButton[] { button1, button2 }, true); } /** * Builds and returns a left aligned bar with three buttons. * * @param button1 the first button to add * @param button2 the second button to add * @param button3 the third button to add * @return a button bar with the given buttons */ public static JPanel buildLeftAlignedBar(JButton button1, JButton button2, JButton button3) { return buildLeftAlignedBar(new JButton[] { button1, button2, button3 }, true); } /** * Builds and returns a left aligned bar with four buttons. * * @param button1 the first button to add * @param button2 the second button to add * @param button3 the third button to add * @param button4 the fourth button to add * @return a button bar with the given buttons */ public static JPanel buildLeftAlignedBar(JButton button1, JButton button2, JButton button3, JButton button4) { return buildLeftAlignedBar(new JButton[] { button1, button2, button3, button4 }, true); } /** * Builds and returns a left aligned bar with five buttons. * * @param button1 the first button to add * @param button2 the second button to add * @param button3 the third button to add * @param button4 the fourth button to add * @param button5 the fifth button to add * @return a button bar with the given buttons */ public static JPanel buildLeftAlignedBar(JButton button1, JButton button2, JButton button3, JButton button4, JButton button5) { return buildLeftAlignedBar(new JButton[] { button1, button2, button3, button4, button5 }, true); } /** * Builds and returns a left aligned button bar with the given buttons. * * @param buttons an array of buttons to add * @return a left aligned button bar with the given buttons */ public static JPanel buildLeftAlignedBar(JButton[] buttons) { ButtonBarBuilder builder = new ButtonBarBuilder(); builder.addGriddedButtons(buttons); builder.addGlue(); return builder.getPanel(); } /** * Builds and returns a left aligned button bar with the given buttons. * * @param buttons an array of buttons to add * @param leftToRightButtonOrder the order in which the buttons to add * @return a left aligned button bar with the given buttons */ public static JPanel buildLeftAlignedBar(JButton[] buttons, boolean leftToRightButtonOrder) { ButtonBarBuilder builder = new ButtonBarBuilder(); builder.setLeftToRightButtonOrder(leftToRightButtonOrder); builder.addGriddedButtons(buttons); builder.addGlue(); return builder.getPanel(); } // General Purpose Factory Methods: Centered **************************** /** * Builds and returns a centered bar with one button. * * @param button1 the first button to add * @return a button bar with the given button */ public static JPanel buildCenteredBar(JButton button1) { return buildCenteredBar(new JButton[] { button1 }); } /** * Builds and returns a centered bar with two buttons. * * @param button1 the first button to add * @param button2 the second button to add * @return a button bar with the given buttons */ public static JPanel buildCenteredBar(JButton button1, JButton button2) { return buildCenteredBar(new JButton[] { button1, button2 }); } /** * Builds and returns a centered bar with three buttons. * * @param button1 the first button to add * @param button2 the second button to add * @param button3 the third button to add * @return a button bar with the given buttons */ public static JPanel buildCenteredBar(JButton button1, JButton button2, JButton button3) { return buildCenteredBar(new JButton[] { button1, button2, button3 }); } /** * Builds and returns a centered bar with four buttons. * * @param button1 the first button to add * @param button2 the second button to add * @param button3 the third button to add * @param button4 the fourth button to add * @return a button bar with the given buttons */ public static JPanel buildCenteredBar(JButton button1, JButton button2, JButton button3, JButton button4) { return buildCenteredBar(new JButton[] { button1, button2, button3, button4 }); } /** * Builds and returns a centered bar with five buttons. * * @param button1 the first button to add * @param button2 the second button to add * @param button3 the third button to add * @param button4 the fourth button to add * @param button5 the fifth button to add * @return a button bar with the given buttons */ public static JPanel buildCenteredBar(JButton button1, JButton button2, JButton button3, JButton button4, JButton button5) { return buildCenteredBar(new JButton[] { button1, button2, button3, button4, button5 }); } /** * Builds and returns a centered button bar with the given buttons. * * @param buttons an array of buttons to add * @return a centered button bar with the given buttons */ public static JPanel buildCenteredBar(JButton[] buttons) { ButtonBarBuilder builder = new ButtonBarBuilder(); builder.addGlue(); builder.addGriddedButtons(buttons); builder.addGlue(); return builder.getPanel(); } /** * Builds and returns a filled bar with one button. * * @param button1 the first button to add * @return a button bar with the given button */ public static JPanel buildGrowingBar(JButton button1) { return buildGrowingBar(new JButton[] { button1 }); } /** * Builds and returns a filled button bar with two buttons. * * @param button1 the first button to add * @param button2 the second button to add * @return a button bar with the given buttons */ public static JPanel buildGrowingBar(JButton button1, JButton button2) { return buildGrowingBar(new JButton[] { button1, button2 }); } /** * Builds and returns a filled bar with three buttons. * * @param button1 the first button to add * @param button2 the second button to add * @param button3 the third button to add * @return a button bar with the given buttons */ public static JPanel buildGrowingBar(JButton button1, JButton button2, JButton button3) { return buildGrowingBar(new JButton[] { button1, button2, button3 }); } /** * Builds and returns a filled bar with four buttons. * * @param button1 the first button to add * @param button2 the second button to add * @param button3 the third button to add * @param button4 the fourth button to add * @return a button bar with the given buttons */ public static JPanel buildGrowingBar(JButton button1, JButton button2, JButton button3, JButton button4) { return buildGrowingBar(new JButton[] { button1, button2, button3, button4 }); } /** * Builds and returns a filled bar with five buttons. * * @param button1 the first button to add * @param button2 the second button to add * @param button3 the third button to add * @param button4 the fourth button to add * @param button5 the fifth button to add * @return a button bar with the given buttons */ public static JPanel buildGrowingBar(JButton button1, JButton button2, JButton button3, JButton button4, JButton button5) { return buildGrowingBar(new JButton[] { button1, button2, button3, button4, button5 }); } /** * Builds and returns a button bar with the given buttons. All button * columns will grow with the bar. * * @param buttons an array of buttons to add * @return a filled button bar with the given buttons */ public static JPanel buildGrowingBar(JButton[] buttons) { ButtonBarBuilder builder = new ButtonBarBuilder(); builder.addGriddedGrowingButtons(buttons); return builder.getPanel(); } // General Purpose Factory Methods: Right Aligned *********************** /** * Builds and returns a right aligned bar with one button. * * @param button1 the first button to add * @return a button bar with the given button */ public static JPanel buildRightAlignedBar(JButton button1) { return buildRightAlignedBar(new JButton[] { button1 }); } /** * Builds and returns a right aligned bar with two buttons. * * @param button1 the first button to add * @param button2 the second button to add * @return a button bar with the given buttons */ public static JPanel buildRightAlignedBar(JButton button1, JButton button2) { return buildRightAlignedBar(new JButton[] { button1, button2 }, true); } /** * Builds and returns a right aligned bar with three buttons. * * @param button1 the first button to add * @param button2 the second button to add * @param button3 the third button to add * @return a button bar with the given buttons */ public static JPanel buildRightAlignedBar(JButton button1, JButton button2, JButton button3) { return buildRightAlignedBar( new JButton[] { button1, button2, button3 }, true); } /** * Builds and returns a right aligned bar with four buttons. * * @param button1 the first button to add * @param button2 the second button to add * @param button3 the third button to add * @param button4 the fourth button to add * @return a button bar with the given buttons */ public static JPanel buildRightAlignedBar(JButton button1, JButton button2, JButton button3, JButton button4) { return buildRightAlignedBar(new JButton[] { button1, button2, button3, button4 }, true); } /** * Builds and returns a right aligned bar with five buttons. * * @param button1 the first button to add * @param button2 the second button to add * @param button3 the third button to add * @param button4 the fourth button to add * @param button5 the fifth button to add * @return a button bar with the given buttons */ public static JPanel buildRightAlignedBar(JButton button1, JButton button2, JButton button3, JButton button4, JButton button5) { return buildRightAlignedBar(new JButton[] { button1, button2, button3, button4, button5 }, true); } /** * Builds and returns a right aligned button bar with the given buttons. * * @param buttons an array of buttons to add * @return a right aligned button bar with the given buttons */ public static JPanel buildRightAlignedBar(JButton[] buttons) { ButtonBarBuilder builder = new ButtonBarBuilder(); builder.addGlue(); builder.addGriddedButtons(buttons); return builder.getPanel(); } /** * Builds and returns a right aligned button bar with the given buttons. * * @param buttons an array of buttons to add * @param leftToRightButtonOrder the order in which the buttons to add * @return a right aligned button bar with the given buttons */ public static JPanel buildRightAlignedBar(JButton[] buttons, boolean leftToRightButtonOrder) { ButtonBarBuilder builder = new ButtonBarBuilder(); builder.setLeftToRightButtonOrder(leftToRightButtonOrder); builder.addGlue(); builder.addGriddedButtons(buttons); return builder.getPanel(); } // Right Aligned Button Bars with Help in the Left ********************** /** * Builds and returns a right aligned bar with help and one button. * * @param help the help button to add on the left side * @param button1 the first button to add * @return a button bar with the given buttons */ public static JPanel buildHelpBar(JButton help, JButton button1) { return buildHelpBar(help, new JButton[] { button1 }); } /** * Builds and returns a right aligned bar with help and two buttons. * * @param help the help button to add on the left side * @param button1 the first button to add * @param button2 the second button to add * @return a button bar with the given buttons */ public static JPanel buildHelpBar(JButton help, JButton button1, JButton button2) { return buildHelpBar(help, new JButton[] { button1, button2 }); } /** * Builds and returns a right aligned bar with help and three buttons. * * @param help the help button to add on the left side * @param button1 the first button to add * @param button2 the second button to add * @param button3 the third button to add * @return a button bar with the given buttons */ public static JPanel buildHelpBar(JButton help, JButton button1, JButton button2, JButton button3) { return buildHelpBar(help, new JButton[] { button1, button2, button3 }); } /** * Builds and returns a right aligned bar with help and four buttons. * * @param help the help button to add on the left side * @param button1 the first button to add * @param button2 the second button to add * @param button3 the third button to add * @param button4 the fourth button to add * @return a button bar with the given buttons */ public static JPanel buildHelpBar(JButton help, JButton button1, JButton button2, JButton button3, JButton button4) { return buildHelpBar(help, new JButton[] { button1, button2, button3, button4 }); } /** * Builds and returns a right aligned bar with help and other buttons. * * @param help the help button to add on the left side * @param buttons an array of buttons to add * @return a right aligned button bar with the given buttons */ public static JPanel buildHelpBar(JButton help, JButton[] buttons) { ButtonBarBuilder builder = new ButtonBarBuilder(); builder.addGridded(help); builder.addRelatedGap(); builder.addGlue(); builder.addGriddedButtons(buttons); return builder.getPanel(); } // Popular Dialog Button Bars: No Help ********************************** /** * Builds and returns a button bar with Close. * * @param close the Close button * @return a panel that contains the button(s) */ public static JPanel buildCloseBar(JButton close) { return buildRightAlignedBar(close); } /** * Builds and returns a button bar with OK. * * @param ok the OK button * @return a panel that contains the button(s) */ public static JPanel buildOKBar(JButton ok) { return buildRightAlignedBar(ok); } /** * Builds and returns a button bar with OK and Cancel. * * @param ok the OK button * @param cancel the Cancel button * @return a panel that contains the button(s) */ public static JPanel buildOKCancelBar(JButton ok, JButton cancel) { return buildRightAlignedBar(new JButton[] { ok, cancel }); } /** * Builds and returns a button bar with OK, Cancel and Apply. * * @param ok the OK button * @param cancel the Cancel button * @param apply the Apply button * @return a panel that contains the button(s) */ public static JPanel buildOKCancelApplyBar(JButton ok, JButton cancel, JButton apply) { return buildRightAlignedBar(new JButton[] { ok, cancel, apply }); } // Popular Dialog Button Bars: Help in the Left ************************* /** * Builds and returns a button bar with * Help and Close. * * @param help the Help button * @param close the Close button * @return a panel that contains the button(s) */ public static JPanel buildHelpCloseBar(JButton help, JButton close) { return buildHelpBar(help, close); } /** * Builds and returns a button bar with * Help and OK. * * @param help the Help button * @param ok the OK button * @return a panel that contains the button(s) */ public static JPanel buildHelpOKBar(JButton help, JButton ok) { return buildHelpBar(help, ok); } /** * Builds and returns a button bar with * Help, OK and Cancel. * * @param help the Help button * @param ok the OK button * @param cancel the Cancel button * @return a panel that contains the button(s) */ public static JPanel buildHelpOKCancelBar(JButton help, JButton ok, JButton cancel) { return buildHelpBar(help, ok, cancel); } /** * Builds and returns a button bar with * Help, OK, Cancel and Apply. * * @param help the Help button * @param ok the OK button * @param cancel the Cancel button * @param apply the Apply button * @return a panel that contains the button(s) */ public static JPanel buildHelpOKCancelApplyBar(JButton help, JButton ok, JButton cancel, JButton apply) { return buildHelpBar(help, ok, cancel, apply); } // Popular Dialog Button Bars: Help in the Right Hand Side ************** /** * Builds and returns a button bar with * Close and Help. * * @param close the Close button * @param help the Help button * @return a panel that contains the button(s) */ public static JPanel buildCloseHelpBar(JButton close, JButton help) { return buildRightAlignedBar(new JButton[] { close, help }); } /** * Builds and returns a button bar with * OK and Help. * * @param ok the OK button * @param help the Help button * @return a panel that contains the button(s) */ public static JPanel buildOKHelpBar(JButton ok, JButton help) { return buildRightAlignedBar(new JButton[] { ok, help }); } /** * Builds and returns a button bar with * OK, Cancel, and Help. * * @param ok the OK button * @param cancel the Cancel button * @param help the Help button * @return a panel that contains the button(s) */ public static JPanel buildOKCancelHelpBar(JButton ok, JButton cancel, JButton help) { return buildRightAlignedBar(new JButton[] { ok, cancel, help }); } /** * Builds and returns a button bar with * OK, Cancel, Apply and Help. * * @param ok the OK button * @param cancel the Cancel button * @param apply the Apply button * @param help the Help button * @return a panel that contains the button(s) */ public static JPanel buildOKCancelApplyHelpBar(JButton ok, JButton cancel, JButton apply, JButton help) { return buildRightAlignedBar(new JButton[] { ok, cancel, apply, help }); } // Add..., Remove ******************************************************* /** * Builds and returns a left aligned button bar with * Add and Remove. * * @param add the Add button * @param remove the Remove button * @return a panel that contains the button(s) */ public static JPanel buildAddRemoveLeftBar(JButton add, JButton remove) { return buildLeftAlignedBar(add, remove); } /** * Builds and returns a filled button bar with Add and Remove. * * @param add the Add button * @param remove the Remove button * @return a panel that contains the button(s) */ public static JPanel buildAddRemoveBar(JButton add, JButton remove) { return buildGrowingBar(add, remove); } /** * Builds and returns a right aligned button bar with * Add and Remove. * * @param add the Add button * @param remove the Remove button * @return a panel that contains the button(s) */ public static JPanel buildAddRemoveRightBar(JButton add, JButton remove) { return buildRightAlignedBar(add, remove); } // Add..., Remove, Properties... **************************************** /** * Builds and returns a left aligned button bar with * Add, Remove, and Properties. * * @param add the Add button * @param remove the Remove button * @param properties the Properties button * @return a panel that contains the button(s) */ public static JPanel buildAddRemovePropertiesLeftBar(JButton add, JButton remove, JButton properties) { return buildLeftAlignedBar(add, remove, properties); } /** * Builds and returns a filled button bar with Add, Remove, and * Properties. * * @param add the Add button * @param remove the Remove button * @param properties the Properties button * @return a panel that contains the button(s) */ public static JPanel buildAddRemovePropertiesBar(JButton add, JButton remove, JButton properties) { ButtonBarBuilder builder = new ButtonBarBuilder(); builder.addGriddedGrowing(add); builder.addRelatedGap(); builder.addGriddedGrowing(remove); builder.addRelatedGap(); builder.addGriddedGrowing(properties); return builder.getPanel(); } /** * Builds and returns a right aligned button bar with * Add, Remove, and Properties. * * @param add the Add button * @param remove the Remove button * @param properties the Properties button * @return a panel that contains the button(s) */ public static JPanel buildAddRemovePropertiesRightBar(JButton add, JButton remove, JButton properties) { return buildRightAlignedBar(add, remove, properties); } // Wizard Bars ********************************************************** /** * Builds and returns a wizard button bar with: * Back, Next, Finish, Cancel. * * @param back the Back button * @param next the Next button * @param finish the Finish button * @param cancel the Cancel button * @return a wizard button bar for back, next, finish, cancel */ public static JPanel buildWizardBar(JButton back, JButton next, JButton finish, JButton cancel) { return buildWizardBar(back, next, new JButton[] { finish, cancel }); } /** * Builds and returns a wizard button bar with: * Help and Back, Next, Finish, Cancel. * * @param help the Help button * @param back the Back button * @param next the Next button * @param finish the Finish button * @param cancel the Cancel button * @return a wizard button bar for help, back, next, finish, cancel */ public static JPanel buildWizardBar(JButton help, JButton back, JButton next, JButton finish, JButton cancel) { return buildWizardBar(new JButton[] { help }, back, next, new JButton[] { finish, cancel }); } /** * Builds and returns a wizard button bar that consists of the back and * next buttons, and some right aligned buttons. * * @param back the mandatory back button * @param next the mandatory next button * @param rightAlignedButtons an optional array of buttons that will be * located in the bar's right hand side * @return a wizard button bar with back, next and a bunch of buttons */ public static JPanel buildWizardBar(JButton back, JButton next, JButton[] rightAlignedButtons) { return buildWizardBar(null, back, next, rightAlignedButtons); } /** * Builds and returns a wizard button bar. It consists of some left * aligned buttons, the back and next buttons, and some right aligned * buttons. * * @param leftAlignedButtons an optional array of buttons that will be * positioned in the bar's left hand side * @param back the mandatory back button * @param next the mandatory next button * @param rightAlignedButtons an optional array of buttons that will be * located in the bar's right hand side * @return a wizard button bar with back, next and a bunch of buttons */ public static JPanel buildWizardBar(JButton[] leftAlignedButtons, JButton back, JButton next, JButton[] rightAlignedButtons) { return buildWizardBar(leftAlignedButtons, back, next, null, rightAlignedButtons); } /** * Builds and returns a wizard button bar. It consists of some left * aligned buttons, the back, next group, and some right aligned buttons. * To allow the finish button to overlay the next button, you can * optionally provide the <code>overlayedFinish</code> parameter. * * @param leftAlignedButtons an optional array of buttons that will be * positioned in the bar's left hand side * @param back the mandatory back button * @param next the mandatory next button * @param overlayedFinish the optional overlayed finish button * @param rightAlignedButtons an optional array of buttons that will be * located in the bar's right hand side * @return a wizard button bar with back, next and a bunch of buttons */ public static JPanel buildWizardBar(JButton[] leftAlignedButtons, JButton back, JButton next, JButton overlayedFinish, JButton[] rightAlignedButtons) { ButtonBarBuilder builder = new ButtonBarBuilder(); if (leftAlignedButtons != null) { builder.addGriddedButtons(leftAlignedButtons); builder.addRelatedGap(); } builder.addGlue(); builder.addGridded(back); builder.addGridded(next); // Optionally overlay the finish and next button. if (overlayedFinish != null) { builder.nextColumn(-1); builder.add(overlayedFinish); builder.nextColumn(); } if (rightAlignedButtons != null) { builder.addRelatedGap(); builder.addGriddedButtons(rightAlignedButtons); } return builder.getPanel(); } }