Class DefaultFormBuilder
FormLayout
. This builder combines frequently used
panel building steps: add a new row, add a label, proceed to the next
data column, then add a component.
The extra value lies in the #append
methods that
append gap rows and component rows if necessary and then add
the given components. They are built upon the superclass behavior
#appendRow
and the set of #add
methods.
A set of component appenders allows to add a textual label and
associated component in a single step.
This builder can map resource keys to internationalized (i15d) texts
when creating text labels, titles and titled separators. Therefore
you must specify a ResourceBundle
in the constructor.
The builder methods throw an IllegalStateException
if one
of the mapping builder methods is invoked and no bundle has been set.
You can configure the build process by setting a leading column, enabling the row grouping and by modifying the gaps between normal lines and between paragraphs. The leading column will be honored if the cursor proceeds to the next row. All appended components start in the specified lead column, except appended separators that span all columns.
It is temptive to use the DefaultFormBuilder all the time and to let it add rows automatically. Use a simpler style if it increases the code readability. Explicit row specifications and cell constraints make your layout easier to understand - but harder to maintain. See also the accompanying tutorial sources and the Tips & Tricks that are part of the Forms documentation.
Sometimes a form consists of many standardized rows but has a few
rows that require a customization. The DefaultFormBuilder can do everything
that the superclasses AbstractFormBuilder
and PanelBuilder
can do;
among other things: appending new rows and moving the cursor.
Again, ask yourself if the DefaultFormBuilder is the appropriate builder.
As a rule of thumb you should have more components than builder commands.
There are different ways to add custom rows. Find below example code
that presents and compares the pros and cons of three approaches.
The texts used in methods #append(String, ...)
and
#appendTitle(String)
as well as the localized texts used in
methods #appendI15d
and #appendI15dTitle
can contain an optional mnemonic marker. The mnemonic and mnemonic index
are indicated by a single ampersand (&).
For example "&Saveinvalid input: '"', or
"Save &asinvalid input: '"'. To use the ampersand itself,
duplicate it, for example "Look&&Feelinvalid input: '"'.
Example:
public void build() { FormLayout layout = new FormLayout( "right:max(40dlu;pref), 3dlu, 80dlu, 7dlu, " // 1st major colum + "right:max(40dlu;pref), 3dlu, 80dlu", // 2nd major column ""); // add rows dynamically DefaultFormBuilder builder = new DefaultFormBuilder(layout); builder.setDefaultDialogBorder(); builder.appendSeparator("Flange"); builder.append("Identifier", identifierField); builder.nextLine(); builder.append("PTI [kW]", new JTextField()); builder.append("Power [kW]", new JTextField()); builder.append("s [mm]", new JTextField()); builder.nextLine(); builder.appendSeparator("Diameters"); builder.append("da [mm]", new JTextField()); builder.append("di [mm]", new JTextField()); builder.append("da2 [mm]", new JTextField()); builder.append("di2 [mm]", new JTextField()); builder.append("R [mm]", new JTextField()); builder.append("D [mm]", new JTextField()); builder.appendSeparator("Criteria"); builder.append("Location", buildLocationComboBox()); builder.append("k-factor", new JTextField()); builder.appendSeparator("Bolts"); builder.append("Material", ViewerUIFactory.buildMaterialComboBox()); builder.nextLine(); builder.append("Numbers", new JTextField()); builder.nextLine(); builder.append("ds [mm]", new JTextField()); }
Custom Row Example:
public JComponent buildPanel() { initComponents(); FormLayout layout = new FormLayout( "right:pref, 3dlu, default:grow", ""); DefaultFormBuilder builder = new DefaultFormBuilder(layout); builder.setDefaultDialogBorder(); builder.setRowGroupingEnabled(true); CellConstraints cc = new CellConstraints(); // In this approach, we add a gap and a custom row. // The advantage of this approach is, that we can express // the row spec and comment area cell constraints freely. // The disadvantage is the misalignment of the leading label. // Also the row's height may be inconsistent with other rows. builder.appendSeparator("Single Custom Row"); builder.append("Name", name1Field); builder.appendRow(builder.getLineGapSpec()); builder.appendRow(new RowSpec("top:31dlu")); // Assumes line is 14, gap is 3 builder.nextLine(2); builder.append("Comment"); builder.add(new JScrollPane(comment1Area), cc.xy(builder.getColumn(), builder.getRow(), "fill, fill")); builder.nextLine(); // In this approach, we append a standard row with gap before it. // The advantage is, that the leading label is aligned well. // The disadvantage is that the comment area now spans // multiple cells and is slightly less flexible. // Also the row's height may be inconsistent with other rows. builder.appendSeparator("Standard + Custom Row"); builder.append("Name", name2Field); builder.append("Comment"); builder.appendRow(new RowSpec("17dlu")); // Assumes line is 14, gap is 3 builder.add(new JScrollPane(comment2Area), cc.xywh(builder.getColumn(), builder.getRow(), 1, 2)); builder.nextLine(2); // In this approach, we append two standard rows with associated gaps. // The advantage is, that the leading label is aligned well, // and the height is consistent with other rows. // The disadvantage is that the comment area now spans // multiple cells and is slightly less flexible. builder.appendSeparator("Two Standard Rows"); builder.append("Name", name3Field); builder.append("Comment"); builder.nextLine(); builder.append(""); builder.nextRow(-2); builder.add(new JScrollPane(comment3Area), cc.xywh(builder.getColumn(), builder.getRow(), 1, 3)); return builder.getPanel(); }
TODO: Consider adding a method for appending a component that spans the
remaining columns in the current row. Method name candidates are
#appendFullSpan
and #appendRemaining
.
- Since:
- 1.0.3
- Version:
- $Revision: 1.11 $
- Author:
- Karsten Lentzsch
- See Also:
-
Constructor Summary
ConstructorsConstructorDescriptionDefaultFormBuilder
(FormLayout layout) Constructs aDefaultFormBuilder
for the given layout.DefaultFormBuilder
(FormLayout layout, ResourceBundle bundle) Constructs aDefaultFormBuilder
for the given layout and resource bundle.DefaultFormBuilder
(FormLayout layout, ResourceBundle bundle, JPanel panel) Constructs aDefaultFormBuilder
for the given layout, resource bundle, and panel.DefaultFormBuilder
(FormLayout layout, JPanel panel) Constructs aDefaultFormBuilder
for the given layout and panel. -
Method Summary
Modifier and TypeMethodDescriptionvoid
Adds a component to the panel using the default constraints with a column span of 1.void
Adds a component to the panel using the default constraints with the given columnSpan.void
Adds two components to the panel; each component will span a single data column.void
Adds three components to the panel; each component will span a single data column.Adds a text label to the panel and proceeds to the next column.Adds a text label and component to the panel.Adds a text label and component to the panel; the component will span the specified number columns.Adds a text label and component to the panel; the component will span the specified number columns.Adds a text label and two components to the panel; each component will span a single column.Adds a text label and two components to the panel; each component will span a single column.Adds a text label and three components to the panel; each component will span a single column.Adds a text label and four components to the panel; each component will span a single column.appendI15d
(String resourceKey) Adds an internationalized (i15d) text label to the panel using the given resource key and proceeds to the next column.appendI15d
(String resourceKey, Component component) Adds an internationalized (i15d) text label and component to the panel.appendI15d
(String resourceKey, Component component, boolean nextLine) Adds an internationalized (i15d) text label and component to the panel.appendI15d
(String resourceKey, Component c, int columnSpan) Adds an internationalized (i15d) text label to the panel using the given resource key; then proceeds to the next data column and adds a component with the given column span.appendI15d
(String resourceKey, Component c1, Component c2) Adds an internationalized (i15d) text label and two components to the panel; each component will span a single column.appendI15d
(String resourceKey, Component c1, Component c2, int colSpan) Adds an internationalized (i15d) text label and two components to the panel; each component will span a single column.appendI15d
(String resourceKey, Component c1, Component c2, Component c3) Adds an internationalized (i15d) text label and three components to the panel; each component will span a single column.Adds an internationalized (i15d) text label and four components to the panel; each component will span a single column.appendI15dSeparator
(String resourceKey) Appends an internationalized titled separator for the given resource key that spans all columns.appendI15dTitle
(String resourceKey) Adds an internationalized title label to the panel and proceeds to the next column.Adds a separator without text that spans all columns.appendSeparator
(String text) Adds a separator with the given text that spans all columns.appendTitle
(String textWithMnemonic) Adds a title label to the panel and proceeds to the next column.Returns the row specification that is used for component rows.protected int
Returns the leading column.int
Returns the offset of the leading column, often 0 or 1.Returns the row specification that is used to separate component row.boolean
Returns whether new data rows are being grouped or not.void
setDefaultRowSpec
(RowSpec defaultRowSpec) Sets the row specification that shall be used for component rows.void
setLeadingColumnOffset
(int columnOffset) Sets the offset of the leading column, often 0 or 1.void
setLineGapSize
(ConstantSize lineGapSize) Sets the size of gaps between component lines using the given constant size.void
setParagraphGapSize
(ConstantSize paragraphGapSize) Sets the size of gaps between paragraphs using the given constant size.void
setRowGroupingEnabled
(boolean enabled) Enables or disables the grouping of new data rows.Methods inherited from class com.jgoodies.forms.builder.I15dPanelBuilder
getI15dString
Methods inherited from class com.jgoodies.forms.builder.AbstractI15dPanelBuilder
addI15dLabel, addI15dLabel, addI15dLabel, addI15dROLabel, addI15dROLabel, addI15dROLabel, addI15dSeparator, addI15dSeparator, addI15dTitle, addI15dTitle, isDebugToolTipsEnabled, setDebugToolTipsEnabled
Methods inherited from class com.jgoodies.forms.builder.PanelBuilder
add, add, addLabel, addLabel, addLabel, addLabel, addROLabel, addROLabel, addROLabel, addROLabel, addSeparator, addSeparator, addSeparator, addSeparator, addTitle, addTitle, addTitle, getComponentFactory, getLabelForFeatureEnabledDefault, getPanel, isLabelForApplicable, isLabelForFeatureEnabled, setBackground, setBorder, setComponentFactory, setDefaultDialogBorder, setLabelFor, setLabelForFeatureEnabled, setLabelForFeatureEnabledDefault, setOpaque
Methods inherited from class com.jgoodies.forms.builder.AbstractFormBuilder
add, add, appendColumn, appendColumn, appendGlueColumn, appendGlueRow, appendLabelComponentsGapColumn, appendParagraphGapRow, appendRelatedComponentsGapColumn, appendRelatedComponentsGapRow, appendRow, appendRow, appendUnrelatedComponentsGapColumn, appendUnrelatedComponentsGapRow, cellConstraints, createLeftAdjustedConstraints, getColumn, getColumnCount, getColumnIncrementSign, getContainer, getLayout, getRow, getRowCount, isLeftToRight, nextColumn, nextColumn, nextLine, nextLine, nextRow, nextRow, setAlignment, setBounds, setColumn, setColumnSpan, setExtent, setHAlignment, setLeftToRight, setOrigin, setRow, setRowSpan, setVAlignment
-
Constructor Details
-
DefaultFormBuilder
Constructs aDefaultFormBuilder
for the given layout.- Parameters:
layout
- theFormLayout
to be used
-
DefaultFormBuilder
Constructs aDefaultFormBuilder
for the given layout and panel.- Parameters:
layout
- theFormLayout
to be usedpanel
- the layout container
-
DefaultFormBuilder
Constructs aDefaultFormBuilder
for the given layout and resource bundle.- Parameters:
layout
- theFormLayout
to be usedbundle
- theResourceBundle
used to lookup i15d strings
-
DefaultFormBuilder
Constructs aDefaultFormBuilder
for the given layout, resource bundle, and panel.- Parameters:
layout
- theFormLayout
to be usedbundle
- theResourceBundle
used to lookup i15d stringspanel
- the layout container
-
-
Method Details
-
getDefaultRowSpec
Returns the row specification that is used for component rows.- Returns:
- the
RowSpec
used for component rows - Since:
- 1.2
-
setDefaultRowSpec
Sets the row specification that shall be used for component rows. It isFormFactory.PREF_ROWSPEC
by default.- Parameters:
defaultRowSpec
- the RowSpec to be used for component rows- Since:
- 1.2
-
getLineGapSpec
Returns the row specification that is used to separate component row.- Returns:
- the
RowSpec
that is used to separate component rows
-
setLineGapSize
Sets the size of gaps between component lines using the given constant size.Examples:
builder.setLineGapSize(Sizes.ZERO); builder.setLineGapSize(Sizes.DLUY9); builder.setLineGapSize(Sizes.pixel(1));
- Parameters:
lineGapSize
- theConstantSize
that describes the size of the gaps between component lines
-
setParagraphGapSize
Sets the size of gaps between paragraphs using the given constant size.Examples:
builder.setParagraphGapSize(Sizes.DLUY14); builder.setParagraphGapSize(Sizes.dluY(22)); builder.setParagraphGapSize(Sizes.pixel(42));
- Parameters:
paragraphGapSize
- theConstantSize
that describes the size of the gaps between paragraphs
-
getLeadingColumnOffset
public int getLeadingColumnOffset()Returns the offset of the leading column, often 0 or 1.- Returns:
- the offset of the leading column
-
setLeadingColumnOffset
public void setLeadingColumnOffset(int columnOffset) Sets the offset of the leading column, often 0 or 1.- Parameters:
columnOffset
- the new offset of the leading column
-
isRowGroupingEnabled
public boolean isRowGroupingEnabled()Returns whether new data rows are being grouped or not.- Returns:
- true indicates grouping enabled, false disabled
-
setRowGroupingEnabled
public void setRowGroupingEnabled(boolean enabled) Enables or disables the grouping of new data rows.- Parameters:
enabled
- indicates grouping enabled, false disabled
-
append
Adds a component to the panel using the default constraints with a column span of 1. Then proceeds to the next data column.- Parameters:
component
- the component to add
-
append
Adds a component to the panel using the default constraints with the given columnSpan. Proceeds to the next data column.- Parameters:
component
- the component to appendcolumnSpan
- the column span used to add
-
append
Adds two components to the panel; each component will span a single data column. Proceeds to the next data column.- Parameters:
c1
- the first component to addc2
- the second component to add
-
append
Adds three components to the panel; each component will span a single data column. Proceeds to the next data column.- Parameters:
c1
- the first component to addc2
- the second component to addc3
- the third component to add
-
append
Adds a text label to the panel and proceeds to the next column.- Parameters:
textWithMnemonic
- the label's text - may mark a mnemonic- Returns:
- the added label
-
append
Adds a text label and component to the panel. Then proceeds to the next data column.The created label is labeling the given component; so the component gets the focus if the (optional) label mnemonic is pressed.
- Parameters:
textWithMnemonic
- the label's text - may mark a mnemoniccomponent
- the component to add- Returns:
- the added label
-
append
Adds a text label and component to the panel; the component will span the specified number columns. Proceeds to the next data column, and goes to the next line if the boolean flag is set.The created label is labeling the given component; so the component gets the focus if the (optional) label mnemonic is pressed.
- Parameters:
textWithMnemonic
- the label's text - may mark a mnemonicc
- the component to addnextLine
- true forces a next line- Returns:
- the added label
- See Also:
-
append
Adds a text label and component to the panel; the component will span the specified number columns. Proceeds to the next data column.The created label is labeling the given component; so the component gets the focus if the (optional) label mnemonic is pressed.
- Parameters:
textWithMnemonic
- the label's text - may mark a mnemonicc
- the component to addcolumnSpan
- number of columns the component shall span- Returns:
- the added label
- See Also:
-
append
Adds a text label and two components to the panel; each component will span a single column. Proceeds to the next data column.The created label is labeling the first component; so the component gets the focus if the (optional) label mnemonic is pressed.
- Parameters:
textWithMnemonic
- the label's text - may mark a mnemonicc1
- the first component to addc2
- the second component to add- Returns:
- the added label
-
append
Adds a text label and two components to the panel; each component will span a single column. Proceeds to the next data column.The created label is labeling the first component; so the component gets the focus if the (optional) label mnemonic is pressed.
- Parameters:
textWithMnemonic
- the label's text - may mark a mnemonicc1
- the first component to addc2
- the second component to addcolSpan
- the column span for the second component- Returns:
- the created label
-
append
Adds a text label and three components to the panel; each component will span a single column. Proceeds to the next data column.The created label is labeling the first component; so the component gets the focus if the (optional) label mnemonic is pressed.
- Parameters:
textWithMnemonic
- the label's text - may mark a mnemonicc1
- the first component to addc2
- the second component to addc3
- the third component to add- Returns:
- the added label
-
append
public JLabel append(String textWithMnemonic, Component c1, Component c2, Component c3, Component c4) Adds a text label and four components to the panel; each component will span a single column. Proceeds to the next data column.The created label is labeling the first component; so the component gets the focus if the (optional) label mnemonic is pressed.
- Parameters:
textWithMnemonic
- the label's text - may mark a mnemonicc1
- the first component to addc2
- the second component to addc3
- the third component to addc4
- the fourth component to add- Returns:
- the added label
-
appendI15d
Adds an internationalized (i15d) text label to the panel using the given resource key and proceeds to the next column.- Parameters:
resourceKey
- the resource key for the the label's text- Returns:
- the added label
-
appendI15d
Adds an internationalized (i15d) text label and component to the panel. Then proceeds to the next data column.The created label is labeling the given component; so the component gets the focus if the (optional) label mnemonic is pressed.
- Parameters:
resourceKey
- the resource key for the text to addcomponent
- the component to add- Returns:
- the added label
-
appendI15d
Adds an internationalized (i15d) text label and component to the panel. Then proceeds to the next data column. Goes to the next line if the boolean flag is set.The created label is labeling the first component; so the component gets the focus if the (optional) label mnemonic is pressed.
- Parameters:
resourceKey
- the resource key for the text to addcomponent
- the component to addnextLine
- true forces a next line- Returns:
- the added label
-
appendI15d
Adds an internationalized (i15d) text label to the panel using the given resource key; then proceeds to the next data column and adds a component with the given column span. Proceeds to the next data column.The created label is labeling the first component; so the component gets the focus if the (optional) label mnemonic is pressed.
- Parameters:
resourceKey
- the resource key for the text to addc
- the component to addcolumnSpan
- number of columns the component shall span- Returns:
- the added label
-
appendI15d
Adds an internationalized (i15d) text label and two components to the panel; each component will span a single column. Proceeds to the next data column.The created label is labeling the first component; so the component gets the focus if the (optional) label mnemonic is pressed.
- Parameters:
resourceKey
- the resource key for the text to addc1
- the first component to addc2
- the second component to add- Returns:
- the added label
-
appendI15d
Adds an internationalized (i15d) text label and two components to the panel; each component will span a single column. Proceeds to the next data column.The created label is labeling the first component; so the component gets the focus if the (optional) label mnemonic is pressed.
- Parameters:
resourceKey
- the resource key for the text to addc1
- the first component to addc2
- the second component to addcolSpan
- the column span for the second component- Returns:
- the added label
-
appendI15d
Adds an internationalized (i15d) text label and three components to the panel; each component will span a single column. Proceeds to the next data column.The created label is labeling the first component; so the component gets the focus if the (optional) label mnemonic is pressed.
- Parameters:
resourceKey
- the resource key for the text to addc1
- the first component to addc2
- the second component to addc3
- the third component to add- Returns:
- the added label
-
appendI15d
public JLabel appendI15d(String resourceKey, Component c1, Component c2, Component c3, Component c4) Adds an internationalized (i15d) text label and four components to the panel; each component will span a single column. Proceeds to the next data column.The created label is labeling the first component; so the component gets the focus if the (optional) label mnemonic is pressed.
- Parameters:
resourceKey
- the resource key for the text to addc1
- the first component to addc2
- the second component to addc3
- the third component to addc4
- the third component to add- Returns:
- the added label
-
appendTitle
Adds a title label to the panel and proceeds to the next column.- Parameters:
textWithMnemonic
- the label's text - may mark a mnemonic- Returns:
- the added title label
-
appendI15dTitle
Adds an internationalized title label to the panel and proceeds to the next column.- Parameters:
resourceKey
- the resource key for the title's text- Returns:
- the added title label
-
appendSeparator
Adds a separator without text that spans all columns.- Returns:
- the added titled separator
-
appendSeparator
Adds a separator with the given text that spans all columns.- Parameters:
text
- the separator title text- Returns:
- the added titled separator
-
appendI15dSeparator
Appends an internationalized titled separator for the given resource key that spans all columns.- Parameters:
resourceKey
- the resource key for the separator title's text- Returns:
- the added titled separator
-
getLeadingColumn
protected int getLeadingColumn()Returns the leading column. Unlike the superclass this method honors the column offset.- Overrides:
getLeadingColumn
in classAbstractFormBuilder
- Returns:
- the leading column
-