com.github.lespaul361.commons.commonroutines.boxbuilding.BoxBuildRoutines Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of Commons-CommonRoutines Show documentation
Show all versions of Commons-CommonRoutines Show documentation
common routines I use in my projects
/*
* Copyright (C) 2019 Charles Hamilton
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program 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 for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
package com.github.lespaul361.commons.commonroutines.boxbuilding;
import java.awt.Component;
import java.awt.Dimension;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
/**
* Some helpful routines for building a {@link Box}
*/
public class BoxBuildRoutines {
/**
* Constant to align to the left
*/
public static final int ALIGN_LEFT = 0;
/**
* Constant to align to the right
*/
public static final int ALIGN_CENTER = 1;
/**
* Constant to align to the right
*/
public static final int ALIGN_RIGHT = 2;
/**
* Constant for no alignment set
*/
public static final int ALIGN_NONE = 3;
/**
* Creates a box with a label and another component to the right of the
* label
*
* @param leftSpace
* Empty space to the left of the label
* @param labelText
* The text for the label
* @param betweenSpace
* Space between the label and the next component
* @param txt
* The component label is for
* @param afterSpace
* Space of the component
* @param txtSize
* size of the component
* @param Alignment
* The alignment of the box
* @return {@link javax.swing.Box}
*/
public static Box createLabelBox(int leftSpace, String labelText, int betweenSpace, Component txt, int afterSpace,
Dimension txtSize, int Alignment) {
Box box = Box.createHorizontalBox();
txt.setPreferredSize(txtSize);
txt.setMaximumSize(txtSize);
txt.setMinimumSize(txtSize);
if (Alignment == ALIGN_RIGHT || Alignment == ALIGN_CENTER) {
box.add(Box.createHorizontalGlue());
}
if (leftSpace > 0) {
box.add(Box.createHorizontalStrut(leftSpace));
}
box.add(new JLabel(labelText));
if (betweenSpace > 0) {
box.add(Box.createHorizontalStrut(betweenSpace));
}
box.add(txt);
if (afterSpace > 0) {
box.add(Box.createHorizontalStrut(afterSpace));
}
if (Alignment == ALIGN_LEFT || Alignment == ALIGN_CENTER) {
box.add(Box.createHorizontalGlue());
}
return box;
}
/**
* Creates a box with a label and another component to the right of the
* label. Aligned to the left
*
* @param leftSpace
* Empty space to the left of the label
* @param labelText
* The text for the label
* @param betweenSpace
* Space between the label and the next component
* @param txt
* The component label is for
* @param afterSpace
* Space of the component
* @param txtSize
* size of the component
* @return {@link javax.swing.Box}
*/
public static Box createLabelBox(int leftSpace, String labelText, int betweenSpace, Component txt, int afterSpace,
Dimension txtSize) {
return createLabelBox(leftSpace, labelText, betweenSpace, txt, afterSpace, txtSize, ALIGN_LEFT);
}
/**
* Creates two label boxes next to each other
*
* @param leftSpace
* Empty space to the left of the label
* @param labelText
* The text for the label
* @param betweenSpace
* Space between the label and the next component
* @param txt
* The component label is for
* @param afterSpace
* Space of the component
* @param txtSize
* size of the component
* @return {@link javax.swing.Box}
*/
public static Box createLabelBoxNoGlue(int leftSpace, String labelText, int betweenSpace, Component txt,
int afterSpace, Dimension txtSize) {
Box box = Box.createHorizontalBox();
txt.setPreferredSize(txtSize);
txt.setMaximumSize(txtSize);
txt.setMinimumSize(txtSize);
if (leftSpace > 0) {
box.add(Box.createHorizontalStrut(leftSpace));
}
box.add(new JLabel(labelText));
if (betweenSpace > 0) {
box.add(Box.createHorizontalStrut(betweenSpace));
}
box.add(txt);
if (afterSpace > 0) {
box.add(Box.createHorizontalStrut(afterSpace));
}
return box;
}
/**
* Add a component to a vertical Box
*
* @param boxV
* The vertical box to add the component to
* @param component
* The component to add the vertical box
* @param topGap
* Space above the component being added
*/
public static void addToVertBox(Box boxV, Component component, int topGap) {
if (topGap > 0) {
boxV.add(Box.createVerticalStrut(topGap));
}
boxV.add(component);
}
/**
*
* @param leftSpace
* Empty space to the left of the label
* @param labelText1
* The text for the first label
* @param betweenSpaceLabel
* Space between the first label and the next component
* @param txt1
* The component first label is for
* @param betweenBoxSpace
* Space between the label boxes
* @param labelText2
* The text for the second label
* @param txt2
* The component second label is for
* @param afterSpace
* Space of the component
* @param txtSize
* size of the components
* @return {@link javax.swing.Box}
*/
private static Box createDualLabelBoxNoGlue(int leftSpace, String labelText1, int betweenSpaceLabel,
Component txt1, int betweenBoxSpace, String labelText2, Component txt2, int afterSpace, Dimension txtSize) {
Box ret = Box.createHorizontalBox();
Box box1 = createLabelBoxNoGlue(0, labelText1, betweenSpaceLabel, txt1, 0, txtSize);
Box box2 = createLabelBoxNoGlue(0, labelText2, betweenSpaceLabel, txt2, 0, txtSize);
ret.add(Box.createHorizontalStrut(leftSpace));
ret.add(box1);
ret.add(Box.createHorizontalStrut(betweenBoxSpace));
ret.add(box2);
ret.add(Box.createHorizontalStrut(afterSpace));
return ret;
}
/**
* Creates a Box with two boxes next to each other
*
* @param box1
* First Box
* @param spaceBetween
* Space between the Boxes
* @param box2
* Second Box
* @param Alignment
* The alignment of the boxes within the containing box
* @return {@link javax.swing.Box}
*/
public static Box createSideBySideBox(Box box1, int spaceBetween, Box box2, int Alignment) {
Box box = Box.createHorizontalBox();
if (Alignment == ALIGN_CENTER || Alignment == ALIGN_RIGHT) {
box.add(Box.createHorizontalGlue());
}
box.add(box1);
box.add(Box.createHorizontalStrut(spaceBetween));
box.add(box2);
if (Alignment == ALIGN_CENTER || Alignment == ALIGN_LEFT) {
box.add(Box.createHorizontalGlue());
}
return box;
}
/**
* Sets the preferred size of the components
*
* @param component
* The component to set the size on
* @param size
* Preferred size
*/
public static void setComponentSize(Component component, Dimension size) {
component.setMinimumSize(size);
component.setPreferredSize(size);
component.setMaximumSize(size);
}
/**
* Creates a box for an component to be centered
*
* @param component
* component to be centered
* @param sideGap
* the gap on each side
* @return {@link javax.swing.Box}
*/
public static Box createCenteredBox(Component component, int sideGap) {
Box boxH = Box.createHorizontalBox();
boxH.add(Box.createHorizontalGlue());
boxH.add(Box.createHorizontalStrut(sideGap));
boxH.add(component);
boxH.add(Box.createHorizontalStrut(sideGap));
boxH.add(Box.createHorizontalGlue());
return boxH;
}
/**
* Creates a panel with 2 buttons at the bottom
*
* @param btn1
* Button on the left
* @param btn2
* Button on the right
* @param szButton
* The side of the buttons
* @return JPanel
*/
public static JPanel getBottomButtonPanel(JButton btn1, JButton btn2, Dimension szButton) {
Box boxH = Box.createHorizontalBox();
Box boxH2 = Box.createHorizontalBox();
btn2.setPreferredSize(szButton);
btn2.setMaximumSize(szButton);
btn2.setMinimumSize(szButton);
btn1.setPreferredSize(szButton);
btn1.setMaximumSize(szButton);
btn1.setMinimumSize(szButton);
boxH.add(btn1);
boxH.add(Box.createHorizontalStrut(10));
boxH.add(btn2);
boxH.add(Box.createRigidArea(new Dimension(20, 50)));
boxH2.add(Box.createHorizontalGlue());
boxH2.add(boxH);
JPanel pnl = new JPanel();
pnl.setLayout(new BoxLayout(pnl, BoxLayout.LINE_AXIS));
pnl.add(boxH2);
return pnl;
}
}