001: /*
002: * Copyright (c) 2002-2007 JGoodies Karsten Lentzsch. All Rights Reserved.
003: *
004: * Redistribution and use in source and binary forms, with or without
005: * modification, are permitted provided that the following conditions are met:
006: *
007: * o Redistributions of source code must retain the above copyright notice,
008: * this list of conditions and the following disclaimer.
009: *
010: * o Redistributions in binary form must reproduce the above copyright notice,
011: * this list of conditions and the following disclaimer in the documentation
012: * and/or other materials provided with the distribution.
013: *
014: * o Neither the name of JGoodies Karsten Lentzsch nor the names of
015: * its contributors may be used to endorse or promote products derived
016: * from this software without specific prior written permission.
017: *
018: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
019: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
020: * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
021: * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
022: * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
023: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
024: * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
025: * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
026: * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
027: * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
028: * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
029: */
030:
031: package com.jgoodies.forms.tutorial.building;
032:
033: import java.awt.Component;
034:
035: import javax.swing.*;
036:
037: import com.jgoodies.forms.builder.PanelBuilder;
038: import com.jgoodies.forms.layout.CellConstraints;
039: import com.jgoodies.forms.layout.FormLayout;
040:
041: /**
042: * Demonstrates the FormLayout with a PanelBuilder.
043: * Columns and rows are specified before the panel is filled with components.
044: * Unlike the {@link PlainExample} this class uses a local variable
045: * to keep track of the current row. The advantage over fixed numbers is,
046: * that it's easier to insert new rows later.<p>
047: *
048: * This panel building style is simple and works quite well. However, you may
049: * consider using a more sophisticated form builder to fill the panel and/or
050: * add rows dynamically; see the {@link DynamicRowsExample} for this alternative.
051: *
052: * @author Karsten Lentzsch
053: * @version $Revision: 1.13 $
054: *
055: * @see PlainExample
056: * @see DynamicRowsExample
057: * @see DefaultFormBuilderExample
058: */
059:
060: public final class RowCounterExample {
061:
062: private JTextField identifierField;
063: private JTextField powerField;
064: private JTextField speedField;
065: private JComboBox materialComboBox;
066: private JComboBox iceClassComboBox;
067: private JTextArea machineryCommentArea;
068: private JTextArea inspectionCommentArea;
069:
070: public static void main(String[] args) {
071: try {
072: UIManager
073: .setLookAndFeel("com.jgoodies.looks.plastic.PlasticXPLookAndFeel");
074: } catch (Exception e) {
075: // Likely PlasticXP is not in the class path; ignore.
076: }
077: JFrame frame = new JFrame();
078: frame.setTitle("Forms Tutorial :: Row Counter");
079: frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
080: JComponent panel = new RowCounterExample().buildPanel();
081: frame.getContentPane().add(panel);
082: frame.pack();
083: frame.setVisible(true);
084: }
085:
086: // Component Creation and Initialization **********************************
087:
088: /**
089: * Creates and intializes the UI components.
090: */
091: private void initComponents() {
092: identifierField = new JTextField();
093: powerField = new JTextField();
094: speedField = new JTextField();
095: materialComboBox = createMaterialComboBox();
096: iceClassComboBox = createIceClassComboBox();
097: machineryCommentArea = new JTextArea();
098: inspectionCommentArea = new JTextArea();
099: }
100:
101: /**
102: * Builds and returns a combo box for materials.
103: *
104: * @return a combo box for different materials
105: */
106: private JComboBox createMaterialComboBox() {
107: return new JComboBox(new String[] { "C45E, ReH=600",
108: "Bolt Material, ReH=800" });
109: }
110:
111: /**
112: * Builds and returns a combo box for ice classes.
113: *
114: * @return a combo box for a bunch of ice classes
115: */
116: private JComboBox createIceClassComboBox() {
117: return new JComboBox(
118: new String[] { "E", "E1", "E2", "E3", "E4" });
119: }
120:
121: // Building *************************************************************
122:
123: /**
124: * Builds the content pane.
125: *
126: * @return the built panel
127: */
128: public JComponent buildPanel() {
129: initComponents();
130: Component machineryPane = new JScrollPane(machineryCommentArea);
131: Component inspectionPane = new JScrollPane(
132: inspectionCommentArea);
133:
134: FormLayout layout = new FormLayout(
135: "right:max(40dlu;pref), 3dlu, 70dlu, 7dlu, "
136: + "right:max(40dlu;pref), 3dlu, 70dlu",
137: "p, 3dlu, p, 3dlu, p, 3dlu, p, 9dlu, "
138: + "p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p");
139: layout.setRowGroups(new int[][] { { 3, 13, 15, 17 } });
140:
141: PanelBuilder builder = new PanelBuilder(layout);
142: builder.setDefaultDialogBorder();
143:
144: CellConstraints cc = new CellConstraints();
145: int row = 1;
146:
147: builder.addSeparator("Shaft", cc.xyw(1, row++, 7));
148: row++;
149:
150: builder.addLabel("Identifier", cc.xy(1, row));
151: builder.add(identifierField, cc.xy(3, row++));
152: row++;
153:
154: builder.addLabel("Power", cc.xy(1, row));
155: builder.add(powerField, cc.xy(3, row));
156: builder.addLabel("Speed", cc.xy(5, row));
157: builder.add(speedField, cc.xy(7, row++));
158: row++;
159:
160: builder.addLabel("Material", cc.xy(1, row));
161: builder.add(materialComboBox, cc.xy(3, row));
162: builder.addLabel("Ice Class", cc.xy(5, row));
163: builder.add(iceClassComboBox, cc.xy(7, row++));
164: row++;
165:
166: builder.addSeparator("Comments", cc.xyw(1, row++, 7));
167: row++;
168:
169: builder.addLabel("Machinery", cc.xy(1, row));
170: builder.add(machineryPane, cc.xywh(3, row++, 5, 3, "f, f"));
171: row += 3;
172:
173: builder.addLabel("Inspection", cc.xy(1, row));
174: builder.add(inspectionPane, cc.xywh(3, row++, 5, 3, "f, f"));
175:
176: return builder.getPanel();
177: }
178:
179: }
|