gpt4 book ai didi

java - 在 GroupLayout 中填充多列

转载 作者:行者123 更新时间:2023-11-30 07:22:07 25 4
gpt4 key购买 nike

在下面的 GroupLayout 中,两列(红色和橙色)具有独立的垂直对齐方式,只是它们具有相同的整体高度和位置。

Desired layout

如果底部橙色项目下方没有添加间隙,该项目将垂直拉伸(stretch)以匹配红色列的整体高度。这是 Not Acceptable (它是一个 JComboBox,看起来很糟糕)。我发现的唯一解决方案是添加一个精确尺寸的固定高度间隙(到橙色元素的底部)。有没有办法动态解决这个问题(即不使用常量)?

最佳答案

答案就在 addComponent() 方法中。它还有另外三个参数,即组件的最小尺寸、首选尺寸和最大尺寸。为了使 JComboBox 不垂直拉伸(stretch),您必须将垂直组中的最大尺寸设置为 GroupLayout.PREFERRED_SIZE

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);
});
}
}

这是屏幕截图:

enter image description here

关于java - 在 GroupLayout 中填充多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37381986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com