GridBagLayout
を使用して(および を使用してGridBagConstraint
)垂直レイアウト(垂直方向に中央揃え)を実現できますgridwidth=REMAINDER
。
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class TestGridBagLayout {
protected void initUI() {
JFrame frame = new JFrame();
JPanel controlPanel = (JPanel) frame.getContentPane();
controlPanel.setLayout(new GridBagLayout());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = GridBagConstraints.REMAINDER;
JPanel fromDatePanel = new JPanel(new FlowLayout());
JPanel untilDatePanel = new JPanel(new FlowLayout());
fromDatePanel.add(new JLabel("From - "));
fromDatePanel.add(new JButton("..."));
untilDatePanel.add(new JLabel("Until - "));
untilDatePanel.add(new JButton("..."));
controlPanel.add(fromDatePanel, gbc);
controlPanel.add(untilDatePanel, gbc);
frame.setSize(600, 600);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
TestGridBagLayout testMultiplePanels = new TestGridBagLayout();
testMultiplePanels.initUI();
}
});
}
}
に を追加した場合のJButton
との違いについては、が考慮しているの実装の違いによるものです。は優先サイズを返しますが、は無限次元として解釈されるサイズを返します。JPanel
BoxLayout
getMaximumSize()
BoxLayout
JButton
JPanel
null
BoxLayout
を保持したい場合BoxLayout
は、オーバーライドJPanel.getMaximumSize()
して返すことができますgetPreferredSize()
:
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class TestGridBagLayout {
protected void initUI() {
JFrame frame = new JFrame();
JPanel controlPanel = (JPanel) frame.getContentPane();
controlPanel.setLayout(new BoxLayout(controlPanel, BoxLayout.Y_AXIS));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel fromDatePanel = new JPanel(new FlowLayout()) {
@Override
public Dimension getMaximumSize() {
return getPreferredSize();
}
};
JPanel untilDatePanel = new JPanel(new FlowLayout()) {
@Override
public Dimension getMaximumSize() {
return super.getMaximumSize();
}
};
fromDatePanel.add(new JLabel("From - "));
fromDatePanel.add(new JButton("..."));
untilDatePanel.add(new JLabel("Until - "));
untilDatePanel.add(new JButton("..."));
controlPanel.add(fromDatePanel);
controlPanel.add(untilDatePanel);
frame.setSize(600, 600);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
TestGridBagLayout testMultiplePanels = new TestGridBagLayout();
testMultiplePanels.initUI();
}
});
}
}