官网:http://www.jgoodies.com/freeware/libraries/forms/
下载地址:http://www.jgoodies.com/downloads/libraries/
需要jgoodies-forms-1.7.1.jar和jgoodies-common-1.6.0.jar
进一步研究,请阅读JGoodies Forms的白皮书、api文档、demo及源码!
转载请标明出处!

package com.gavin.demo;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
/**
* @author gavin
*/
public class Example1 extends JFrame{
public Example1(){
initUI();
}
private void initUI() {
/**
pref : preferred size
min : minimum size
dlu: 字体大小的单位
px:pixels 像素
the panel’s grid – including the columns and rows for the gaps between the components.
panel中包含列、行、间隔,即row、column、gap
以下例子是一个5行5列(包含间隔)的界面,但是看到的数据是三行三列:
————————————————————————————————————————————————————
Label1 gap textField1 textField1 textField1
————————————————————————————————————————————————————
>>>>>>>>>>>>>>>>>>>>>gap<<<<<<<<<<<<<<<<<<<<<<<<
————————————————————————————————————————————————————
Label2
gap extField2 gap no data
————————————————————————————————————————————————————
>>>>>>>>>>>>>>>>>>>>>gap<<<<<<<<<<<<<<<<<<<<<<<<
————————————————————————————————————————————————————
Label3
gap textField3 gap
detailsButton
————————————————————————————————————————————————————
CellConstraints构造器的六个参数:
grid x(col), grid y(row), grid width (column span), grid height (row span), horizontal alignment and vertical alignment.
FormLayout构造器:
eg1:
// Label, gap, component
FormLayout layout = new FormLayout(
"pref, 4dlu, pref");
// Right-aligned label, gap, component, gap, component
FormLayout layout = new FormLayout(
"right:pref, 4dlu, 50dlu, 4dlu, 50dlu");
// Left-aligned labels, gap, components, gap, components
FormLayout layout = new FormLayout(
"left:pref, 4dlu, pref, 4dlu, pref");
eg2:
(说明:The columns and rows are specified by three parts: a mandatory size, an
optional default alignment and an optional resizing behavior.
即:pref-->一个固定的尺寸
left/right-->可选的对齐方式
grow-->可选的调整大小的行为)
new FormLayout(“right:pref, 10px, left:pref:grow”, // 3 columns
“pref, 4px, pref, pref:grow”); // 4 rows
ColumnSpec supports the following alignments: left, center, right, fill;
RowSpec supports top, center, bottom, fill.
>>>>Spec 1: Column and Row String Encoding Syntax <<<<<<
columnSpec ::= [columnAlignment:] size [:resizeBehavior]
rowSpec ::= [rowAlignment :] size [:resizeBehavior]
columnAlignment ::= LEFT | CENTER | RIGHT | FILL | L | C | R | F
rowAlignment ::= TOP | CENTER | BOTTOM | FILL | T | C | B | F
size ::= constantSize | componentSize | boundedSize
componentSize ::= MIN | PREF | DEFAULT | M | P | D
constantSize ::= <integer>integerUnit | <double>doubleUnit
integerUnit ::= PX | PT | DLU
doubleUnit ::= IN | MM | CM
boundedSize ::= MIN(constantSize;componentSize)
| MAX(constantSize;componentSize)
resizeBehavior ::= NONE | GROW | GROW(<double>) | G(<double>)
>>>>Spec 1: Column and Row String Encoding Syntax <<<<<<
eg:
“10px”, “4dlu”, “min”, “pref”, “default”, “left:6px”, “right:6dlu”,
“left:pref:grow”, “pref:grow(0.5)”, “l:m:g(0.8)”, “left:max
(50dlu;pref)”
layout.setColumnGroups(new int[][]{ {2, 4} });
layout.setRowGroups (new int[][]{ {1, 4}, {2, 3} });
说明:Column and row groups specifiy that a set of columns or rows will get the
same width or height.
>>>>>>>>>>>>>>>>Spec 2: Cell Constraints String Encoding Syntax<<<<<<<<<<<<<<<<<<
constraints ::= column, row [, colSpan, rowSpan][, hAlign, vAlign]
column ::= <integer>
row ::= <integer>
colSpan ::= <integer>
rowSpan ::= <integer>
hAlign ::= LEFT | CENTER | RIGHT | DEFAULT | FILL
| L | C | R | D | F
vAlign ::= TOP | CENTER | BOTTOM | DEFAULT | FILL
| T | C | B | D | F
>>>>>>>>>>>>>>>>Spec 2: Cell Constraints String Encoding Syntax<<<<<<<<<<<<<<<<<<
*/
FormLayout layout = new FormLayout(
"pref, 4dlu, 50dlu, 4dlu, min", // columns:各列的大小
"pref, 2dlu, pref, 2dlu, pref"); // rows:各行的大小
layout.setRowGroups(new int[][]{{1, 3, 5}});//第1,3,5行具有相同的高度
JPanel panel = new JPanel();
panel.setLayout(layout);
JTextField textField1 = new JTextField();
JTextField textField2 = new JTextField();
JTextField textField3 = new JTextField();
JButton detailsButton = new JButton("detail");
CellConstraints cc = new CellConstraints();//网格约束
panel.add(new JLabel("Label1"), cc.xy (1, 1)); //第一列,第一行
panel.add(textField1, cc.xyw(3, 1, 3));//第一列,第三行,占3列的宽度
panel.add(new JLabel("Label1"), cc.xy (1, 3));//第一列,第三行
panel.add(textField2, cc.xy (3, 3));//第3列,第3行
panel.add(new JLabel("Label3"), cc.xy (1, 5));//第一列,第五行
panel.add(textField3, cc.xy (3, 5));//第3列,第五行
panel.add(detailsButton, cc.xy (5, 5));//第5列,第5行
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
setContentPane(panel);
}

public static void main(String[] args) {
JFrame jf = new Example1();
jf.pack();
jf.setLocationRelativeTo(null); //居中
jf.setVisible(true);
}
}
![]()
package com.gavin.demo;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import com.jgoodies.forms.builder.PanelBuilder;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
/**
*PanelBuilder
* @author gavin
*/
public class Example2 extends JFrame{
public Example2(){
initUI();
}
private void initUI() {
FormLayout layout = new FormLayout(
"right:max(50dlu;p), 4dlu, 75dlu, 7dlu, right:p, 4dlu, 75dlu",
"p, 2dlu, p, 3dlu, p, 3dlu, p, 7dlu, " +
"p, 2dlu, p, 3dlu, p, 3dlu, p");
JTextField idField = new JTextField();
JTextField powerField = new JTextField();
JTextField ptiField = new JTextField();
JTextField lenField = new JTextField();
JTextField daField = new JTextField();
JTextField diField = new JTextField();
JTextField da2Field = new JTextField();
JTextField di2Field = new JTextField();
JTextField rField = new JTextField();
JTextField dField = new JTextField();
PanelBuilder builder = new PanelBuilder(layout);
builder.setDefaultDialogBorder();
CellConstraints cc = new CellConstraints();
builder.addSeparator("Segment", cc.xyw(1, 1, 7));
builder.addLabel("Identifier", cc.xy (1, 3));
builder.add(idField, cc.xy (3, 3));
builder.addLabel("PTI [kW]", cc.xy (1, 5));
builder.add(ptiField, cc.xy (3, 5));
builder.addLabel("Power [kW]", cc.xy (5, 5));
builder.add(powerField, cc.xy (7, 5));
builder.addLabel("len [mm]", cc.xy (1, 7));
builder.add(lenField, cc.xy (3, 7));
builder.addSeparator("Diameters", cc.xyw(1, 9, 7));
builder.addLabel("da [mm]", cc.xy (1, 11));
builder.add(daField, cc.xy (3, 11));
builder.addLabel("di [mm]", cc.xy (5, 11));
builder.add(diField, cc.xy (7, 11));
builder.addLabel("da2 [mm]", cc.xy (1, 13));
builder.add(da2Field, cc.xy (3, 13));
builder.addLabel("di2 [mm]", cc.xy (5, 13));
builder.add(di2Field, cc.xy (7, 13));
builder.addLabel("R [mm]", cc.xy (1, 15));
builder.add(rField, cc.xy (3, 15));
builder.addLabel("D [mm]", cc.xy (5, 15));
builder.add(dField, cc.xy (7, 15));
JPanel panel = builder.getPanel();
panel.setLayout(layout);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
setContentPane(panel);
}
public static void main(String[] args) {
JFrame jf = new Example2();
jf.pack();
jf.setLocationRelativeTo(null); //居中
jf.setVisible(true);
}
}
![]()
package com.gavin.demo;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import com.jgoodies.forms.builder.DefaultFormBuilder;
import com.jgoodies.forms.layout.FormLayout;
/**
*DefaultFormBuilder
* @author gavin
*/
public class Example3 extends JFrame{
public Example3(){
initUI();
}
private void initUI() {
JPanel panel = new JPanel();
JTextField idField = new JTextField();
JTextField powerField = new JTextField();
JTextField ptiField = new JTextField();
JTextField lenField = new JTextField();
JTextField daField = new JTextField();
JTextField diField = new JTextField();
JTextField da2Field = new JTextField();
JTextField di2Field = new JTextField();
JTextField rField = new JTextField();
JTextField dField = new JTextField();
FormLayout layout = new FormLayout(
"right:max(40dlu;p), 4dlu, 80dlu, 7dlu, " // 1st major column
+ "right:max(40dlu;p), 4dlu, 80dlu", // 2nd major column
""); // add rows dynamically
DefaultFormBuilder builder = new DefaultFormBuilder(layout,panel);
builder.setDefaultDialogBorder();
builder.appendSeparator("Segment");
builder.append("Identifier", idField);
builder.nextLine();
builder.append("PTI [kW]", ptiField);
builder.append("Power [kW]", powerField);
builder.append("len [mm]", lenField);
builder.nextLine();
builder.appendSeparator("Diameters");
builder.append("da [mm]", daField);
builder.append("di [mm]", diField);
builder.append("da2 [mm]", da2Field);
builder.append("di2 [mm]", di2Field);
builder.append("R [mm]", rField);
builder.append("D [mm]", dField);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setContentPane(panel);
}
public static void main(String[] args) {
JFrame jf = new Example3();
jf.pack();
jf.setLocationRelativeTo(null); //居中
jf.setVisible(true);
}
}
分享到:
相关推荐
java swing 布局所需组件formlayout所需jar包 jgoodies-common-1.6.0 jgoodies-forms-1.7.2 本人在烽火期间,使用的就是FormLayout布局,简单易用、功能强大,适用于swing企业和感兴趣的Java可视化兴趣爱好者。如果...
JFormDesigner完全支持JGoodies FormLayout , TableLayout , GridBagLayout ,和其他标准配置管理人员。先进的GridBagLayout支持允许规格的横向和纵向的差距(如TableLayout ) ,这使得设计的一种形式一致差距...
JFormDesigner完全支持JGoodies FormLayout , TableLayout , GridBagLayout , 和其他标准配置管理人员。先进的GridBagLayout支持允许规格的横向和纵向的差距(如TableLayout ) , 这使得设计的一种形式一致差距...
可能还会自定义组件或使用第三方库如JGoodies FormLayout来增强UI。 7. **事件处理**:通过监听器(Listener)机制,当用户与界面交互时(如点击按钮),执行相应的业务逻辑。例如,点击“借书”按钮会触发借阅流程...
9. JGoodies FormLayout 10. MiGLayout 11. SpringLayout Absolute Layout Absolute Layout(又称 Null Layout)是简单的 x 轴、y 轴方向上的布局。拖动组件时带着提示组件位置和尺寸的信息,Absolute Layout 提供...
**FormLayout**是JGoodies Forms框架的核心组件,它提供了一种基于表格形式的布局模型,允许开发者以直观且灵活的方式定义面板中的元素位置和大小。与传统的Swing布局管理器相比,FormLayout在处理复杂布局时具有...
FormLayoutMaker 是一个所见即所得的工具,使您能够使用 JGoodies FormLayout 布局管理器轻松构建 Java Swing 布局。 非常适合那些讨厌 IDE 表单构建器但需要快速强大布局的人。 ...
3. **表单布局(FormLayout)**:FormLayout 是JGoodies Forms 库中最主要的布局管理器,它使用列和行的网格结构,允许开发者通过简单的字符串定义布局模式。这种布局方式允许更灵活的调整和扩展,使得复杂的界面...
FormLayoutBuilder 是一个 WYSIWYG 工具,使您能够使用 JGoodies FormLayout 布局管理器轻松构建 Java Swing 布局。 非常适合那些讨厌 IDE 表单构建器但需要快速强大布局的人。
JGoodies Forms框架下的FormLayout为Swing提供了强大而灵活的布局解决方案,不仅简化了面板设计过程,还提高了代码的可读性和可维护性。对于追求高效、优雅界面设计的Java开发者而言,掌握FormLayout无疑是一项重要...
FormLayoutMaker 是一个所见即所得的工具,使您能够使用 JGoodies FormLayout 布局管理器轻松构建 Java Swing 布局。 非常适合那些讨厌 IDE 表单构建器但需要快速强大布局的人。 ...
2. 定义布局规则:使用`FormLayout`类创建布局,通过`ColumnSpec`和`RowSpec`定义列和行的规则。 3. 添加组件:将Swing组件添加到布局中,通过指定约束来确定其位置和大小。 4. 数据绑定:使用`BeanBinding`类将组件...
在UI组件方面,JGoodies Common库提供了自定义的布局管理器,如`FormLayout`,它允许开发者以表格的形式精确控制组件的位置和大小,从而实现更为美观和统一的界面设计。此外,库中还有诸如`BorderFactory`等辅助类,...
import com.jgoodies.forms.layout.FormLayout; import net.sourceforge.jcalendarbean.CalendarBean; import net.sourceforge.jcalendarbean.DatePicker; public class DateSelectExample { public static void ...
除了这两个主题库,压缩包中的`swing-layout.jar`文件是JGoodies的Swing布局管理器库,它提供了一些增强的布局策略,可以帮助开发者更好地控制组件的排列和布局,比如FormLayout,它可以方便地创建复杂的网格布局。...
import com.jgoodies.forms.layout.FormLayout; import com.sun.jdi.ClassLoaderReference; import com.sun.jdi.VirtualMachine; import com.sun.jdi.VirtualMachineManager; import com.sun.jdi.connect.*; import ...
在Java Swing中,界面布局往往是一个挑战,JGoodies提供了一系列的布局管理器,如FormLayout、GridBagLayout的增强版本,帮助开发者更轻松地创建美观且响应式的用户界面,提高用户体验。 项目中的“DataInterface-...