我正在为 UI 创建一个使用 SWING 的 Java 应用程序。我对 LayoutManager 的选择转到了 GroupLayout,但现在我遇到了 Component 的问题。
基本布局由三列两行组成(有嵌套的行,如下面的代码所示),第二行仅包含一个带有 JCheckBox 列表的 JPane。
我的问题是我想以跨越列的方式插入 JPanel,而不影响其他列的大小(即 Canvas 必须是方形的而不是矩形的)。
有可能还是我必须更改 LayoutManager?
这是代码:
//create and set LayoutManager
GroupLayout gp = new GroupLayout(this.getContentPane());
gp.setAutoCreateContainerGaps(true);
gp.setAutoCreateGaps(true);
this.setLayout(gp);
//set alignment criteria
GroupLayout.Alignment hAlign = GroupLayout.Alignment.TRAILING;
GroupLayout.Alignment vAlign = GroupLayout.Alignment.BASELINE;
//add component into layout
//set horizontal group
gp.setHorizontalGroup(gp.createSequentialGroup()
.addGroup(gp.createParallelGroup(hAlign)
.addComponent(imageCanvas)
.addComponent(densitiesPanel))
.addGroup(gp.createParallelGroup(hAlign)
.addComponent(projectPathField)
.addComponent(sourceDensityLabel)
.addComponent(sourceSizeLabel))
.addGroup(gp.createParallelGroup(hAlign)
.addComponent(projectPathButton)
.addComponent(sourceDensityComboBox)
.addComponent(sourceSizeTextField))
);
//set vertical group
gp.setVerticalGroup(gp.createSequentialGroup()
.addGroup(gp.createParallelGroup(vAlign)
.addComponent(imageCanvas)
.addGroup(gp.createSequentialGroup()
.addGroup(gp.createParallelGroup(vAlign)
.addComponent(projectPathField)
.addComponent(projectPathButton))
.addGroup(gp.createParallelGroup(vAlign)
.addComponent(sourceDensityLabel)
.addComponent(sourceDensityComboBox))
.addGroup(gp.createParallelGroup(vAlign)
.addComponent(sourceSizeLabel)
.addComponent(sourceSizeTextField)))
)
.addComponent(densitiesPanel)
);