Die Antwort liegt in der addComponent()
Methode. Es hat drei zusätzliche Parameter, nämlich minimale, bevorzugte und maximale Größe der Komponente. Für die JComboBox
nicht vertikal zu dehnen, müssen Sie die maximale Größe auf GroupLayout.PREFERRED_SIZE
in der vertikalen Gruppe festlegen. Hier
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);
});
}
}
ist der Screenshot:

'Grouplayout ist ein Layout-Manager, der für die GUI-Builder, wie Matisse' entwickelt wurde, und es ist auch durch SpringLayout ersetzt. Erwägen Sie, hierfür einen GUI-Builder zu verwenden und erwägen Sie ein Upgrade auf SpringLayout. (P.S. Wir könnten Ihren Code dafür verwenden.) – markspace
@markspace: Guter Punkt über ein [mcve]; 'GroupLayout' seit 1.6; 'SpringLayout' seit 1.4. – trashgod