GridBagLayout协助

时间:2012-10-20 11:24:25

标签: java layout-manager gridbaglayout

我已经尝试了所有组合并查看了所有文档,但我无法弄清楚如何使用GridBagLayout。

我在JPanel中有3个组件,GridBagLayout是JPanel的LayoutManager,在3个组件上使用GridBagConstraints。

使用当前代码(如下所示),3个元素正确显示在面板上。问题是第一个组件是JLabel,有时很长,如果是这种情况,那么它将扩展并使其他2个组件变小。

我的目标是让一个JPanel的GridBagLayout为1行4列,其中第一个元素占用前2列,其他2个元素占用剩下的2个,并且这些元素不会扩展他们的专栏。

private static void setConstraints(GridBagConstraints constraints, int gridx, int gridy, int weightx, Insets insets) {
    constraints.gridx = gridx;
    constraints.weightx = weightx;
    constraints.insets = insets;
}

gridBagLayout = new GridBagLayout();
constraints = new GridBagConstraints();
centerPanel = new JPanel(gridBagLayout);

constraints.fill = GridBagConstraints.HORIZONTAL;
fileNameLabel = new JLabel("Resolving: '" + EngineHelpers.trimStringToFitPanel(urlTextField.getText(), 70) + "'");
setConstraints(constraints, 0, 0, 2, new Insets(0, 5, 5, 0));
gridBagLayout.setConstraints(fileNameLabel, constraints);
progressBar = new JProgressBar();
progressBar.setStringPainted(true);
setConstraints(constraints, 1, 0, 1, new Insets(0, 5, 5, 0));
gridBagLayout.setConstraints(progressBar, constraints);
cancelDownloadButton = new JButton("Cancel");
setConstraints(constraints, 2, 0, 1, new Insets(0, 0, 0, 0));
gridBagLayout.setConstraints(cancelDownloadButton, constraints);

centerPanel.add(fileNameLabel);
centerPanel.add(progressBar);
centerPanel.add(cancelDownloadButton);

先谢谢大家,抱歉这个愚蠢的问题!

1 个答案:

答案 0 :(得分:2)

对于按钮和进度条,您可能希望weightx设置为0。对于标签,将权重设置为1.这将使按钮和进度条保持不变,让进度条占用所有额外空间。

同时将进度条约束上的gridwidth设置为2,因此它实际上使用了2列。

最后,根据放置centerPanel的位置,可能无法实际扩展以填充容器。如果将centerPanel放置在具有BorderLayout的父级中,则应展开它。为确保您可以添加centerPanel.setBorder(BorderFactory.createLineBorder(Color.RED))边框进行调试。这对按钮,标签和进度条也很有用。