我想要一个"列表"连接的JPanel
s,其中每个单元格具有相应的JPanel
的大小。例如:
在此示例中,Panel1的setPreferredSize小于Panel2的setPreferredSize。连接JPanels的结果是上图。
我考虑过制作一个网格布局,但我找不到一种方法来保持每个小组setPreferredSize
的维度...现在我所拥有的是单元格之间的重量比... < / p>
gridBagLayout = new GridBagLayout();
gridBagLayout.columnWidths = new int[]{0, 0};
gridBagLayout.rowHeights = new int[]{0, 0, 0};
gridBagLayout.columnWeights = new double[]{1.0, Double.MIN_VALUE};
gridBagLayout.rowWeights = new double[]{1.0, 9.0, Double.MIN_VALUE};
setLayout(gridBagLayout);
p1 = new Panel1();
p2 = new Panel2();
GridBagConstraints gbc_p1 = new GridBagConstraints();
gbc_p1.insets = new Insets(0, 0, 0, 0);
gbc_p1.fill = GridBagConstraints.BOTH;
gbc_p1.gridx = 0;
gbc_p1.gridy = 0;
add(p1, gbc_p1);
GridBagConstraints gbc_p2 = new GridBagConstraints();
gbc_p2.fill = GridBagConstraints.BOTH;
gbc_p2.gridx = 0;
gbc_p2.gridy = 1;
add(p2, gbc_p2);
答案 0 :(得分:1)
我只想垂直连接JPanels并保持其setPreferredSize()大小
GridBagLayout将尊重组件的首选大小。
不要使用&#34; fill&#34;约束
答案 1 :(得分:1)
而不是古老的GridBaglayout
我对BoxLayout
提出了建议。
public class PanelTower extends JFrame {
int length = 4 ;
public PanelTower() {
JPanel towerPanel = new JPanel();
towerPanel.setLayout(new BoxLayout(towerPanel, BoxLayout.Y_AXIS));
JPanel[] panels = new JPanel[length];
for (int i = 0; i < length; i++) {
panels[i] = new JPanel();
panels[i].setBackground(new Color((float)Math.random(), (float)Math.random(), (float)Math.random()));
Dimension dims = new Dimension((i+1)*50, (i+1)*50);
panels[i].setPreferredSize(dims);
panels[i].setMinimumSize(dims);
panels[i].setMaximumSize(dims);
towerPanel.add(panels[i]);
}
add(towerPanel);
setDefaultCloseOperation(EXIT_ON_CLOSE);
pack();
setVisible(true);
}
public static void main(String[] args) {
new PanelTower();
}
}
我不确定您的确切要求,但这应该很容易修改(我怀疑从您的示例中宽度是恒定的,只有高度变化)。