Java 在GroupLayout中填充多个列
在下面的GroupLayout中,两列(红色和橙色)具有独立的垂直对齐,只是它们共享相同的总体高度和位置Java 在GroupLayout中填充多个列,java,swing,layout-manager,grouplayout,Java,Swing,Layout Manager,Grouplayout,在下面的GroupLayout中,两列(红色和橙色)具有独立的垂直对齐,只是它们共享相同的总体高度和位置 在底部橙色项目下方不添加间隙的情况下,该项目将垂直拉伸,以匹配红色列的总体高度。这是不可接受的(这是一个JComboBox,看起来很可怕)。我找到的唯一解决方案是添加一个精确标注尺寸的固定高度间隙(到橙色项目的底部)。有没有办法动态解决这个问题(即不使用常量)?答案在于addComponent()方法。它还有三个额外的功能 参数,即组件的最小、首选和最大尺寸。 要使JComboBox不垂直
在底部橙色项目下方不添加间隙的情况下,该项目将垂直拉伸,以匹配红色列的总体高度。这是不可接受的(这是一个JComboBox,看起来很可怕)。我找到的唯一解决方案是添加一个精确标注尺寸的固定高度间隙(到橙色项目的底部)。有没有办法动态解决这个问题(即不使用常量)?答案在于
addComponent()
方法。它还有三个额外的功能
参数,即组件的最小、首选和最大尺寸。
要使JComboBox
不垂直拉伸,必须将最大大小设置为GroupLayout。垂直组中的首选大小
package com.zetcode;
import java.awt.Color;
import java.awt.Container;
import java.awt.EventQueue;
import javax.swing.GroupLayout;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import static javax.swing.JFrame.EXIT_ON_CLOSE;
import javax.swing.JPanel;
public class GroupLayoutMultipleColumns extends JFrame {
public GroupLayoutMultipleColumns() {
initUI();
}
private void initUI() {
JPanel green1 = createPanel(new Color(60, 170, 70));
JPanel green2 = createPanel(new Color(60, 170, 70));
JPanel red1 = createPanel(new Color(230, 0, 50));
JPanel red2 = createPanel(new Color(230, 0, 50));
JPanel red3 = createPanel(new Color(230, 0, 50));
JPanel red4 = createPanel(new Color(230, 0, 50));
JComboBox combo1 = new JComboBox();
JComboBox combo2 = new JComboBox();
createLayout(green1, red1, red2, red3, red4,
combo1, combo2, green2);
setTitle("Multiple columns");
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public JPanel createPanel(Color col) {
JPanel panel = new JPanel();
panel.setBackground(col);
return panel;
}
private void createLayout(JComponent... arg) {
Container pane = getContentPane();
GroupLayout gl = new GroupLayout(pane);
pane.setLayout(gl);
gl.setAutoCreateContainerGaps(true);
gl.setAutoCreateGaps(true);
gl.setHorizontalGroup(gl.createParallelGroup()
.addComponent(arg[0])
.addGroup(gl.createSequentialGroup()
.addGroup(gl.createParallelGroup()
.addComponent(arg[1])
.addComponent(arg[2])
.addComponent(arg[3])
.addComponent(arg[4]))
.addGroup(gl.createParallelGroup()
.addComponent(arg[5])
.addComponent(arg[6])))
.addComponent(arg[7])
);
gl.setVerticalGroup(gl.createSequentialGroup()
.addComponent(arg[0])
.addGroup(gl.createSequentialGroup()
.addGroup(gl.createParallelGroup()
.addGroup(gl.createSequentialGroup()
.addComponent(arg[1])
.addComponent(arg[2])
.addComponent(arg[3])
.addComponent(arg[4]))
.addGroup(gl.createSequentialGroup()
.addComponent(arg[5], GroupLayout.DEFAULT_SIZE,
GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(arg[6], GroupLayout.DEFAULT_SIZE,
GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))))
.addComponent(arg[7])
);
pack();
}
public static void main(String[] args) {
EventQueue.invokeLater(() -> {
GroupLayoutMultipleColumns ex = new GroupLayoutMultipleColumns();
ex.setVisible(true);
});
}
}
以下是截图:
GroupLayout是一个为诸如Matisse等GUI构建者开发的布局管理器,它也被SpringLayout所取代。考虑为此使用GUI生成器,并考虑升级到SpReSpRead。(顺便说一句,我们可以使用你的代码。)@markspace:a的观点很好<代码>组布局
自1.6起<代码>SpringLayout
从1.4开始。