簡體   English   中英

GridBagLayout協助

[英]GridBagLayout Assistance

我已經嘗試了所有組合並查看了所有文檔,但我無法弄清楚如何使用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);

在此先感謝大家,對不起這個愚蠢的問題!

您可能希望按鈕和進度條的weightx設置為0。 對於標簽,將權重設置為1.這將使按鈕和進度條保持不變,讓進度條占用所有額外空間。

同時將進度條約束上的gridwidth設置為2,這樣它實際上使用了2列。

最后,根據centerPanel的放置位置,可能無法實際擴展以填充容器。 如果將centerPanel放置在具有BorderLayout的父級中,則應展開它。 要確保,您可以使用centerPanel.setBorder(BorderFactory.createLineBorder(Color.RED))添加邊框以進行調試。 這對按鈕,標簽和進度條也很有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM