考虑将JPanel嵌套使用各自的布局. BoxLayout可以让您居中放置JButton的内部JPanel.内部面板使用GridLayout,而使用外部JPanel的BoxLayout在顶部和底部添加了胶水:
JPanel innerSelectPanel = new JPanel(new GridLayout(0, 1, 0, 5));
// innerSelectPanel.setPreferredSize(new Dimension(50, 0));
innerSelectPanel.add(selectAllButton);
innerSelectPanel.add(selectButton);
innerSelectPanel.add(deselectButton);
innerSelectPanel.add(deselectAllButton);
innerSelectPanel.setOpaque(false);
innerSelectPanel.setBorder(BorderFactory.createEmptyBorder(0, 2, 0, 2));
selectButtonsPanel.setLayout(new BoxLayout(selectButtonsPanel, BoxLayout.PAGE_AXIS));
selectButtonsPanel.add(Box.createVerticalGlue());
selectButtonsPanel.add(innerSelectPanel);
selectButtonsPanel.add(Box.createVerticalGlue());
例如:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayou