答えはaddComponent()
メソッドにあります。それにはさらに3つのパラメータ、すなわちコンポーネントの最小サイズ、優先サイズ、最大サイズがあります。 JComboBox
が垂直に伸びないようにするには、垂直グループの最大サイズを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](https://i.stack.imgur.com/wJF4o.png)
'GroupLayoutは、Matisse'などのGUIビルダーのために開発された、それはまた、SpringLayoutは取って代わられていレイアウトマネージャです。これにはGUIビルダーの使用を検討し、SpringLayoutへのアップグレードを検討してください。 (私たちはあなたのコードをこのために使うことができました) – markspace
@markspace:[mcve]についての良い点; GroupLayout'は1.6以降です。 1.4以降のSpringLayout – trashgod