0

すべての組み合わせを試し、すべてのドキュメントを調べましたが、GridBagLayout の使用方法がわかりません。

JPanel には 3 つのコンポーネントがあり、GridBagLayout は JPanel の LayoutManager であり、3 つのコンポーネントで GridBagConstraints を使用しています。

現在のコード (以下に示す) では、3 つの要素がパネルに正しく表示されます。問題は、最初のコンポーネントが非常に長い JLabel であることです。この場合、展開されて他の 2 つのコンポーネントが小さくなります。

私の目的は、最初の要素が最初の 2 列を占め、他の 2 要素が残りの 2 列を占める、1 行 4 列の GridBagLayout を持つ JPanel を持つことです。列。

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);

皆さん、前もってありがとう、ばかげた質問でごめんなさい!

4

1 に答える 1

2

おそらくweightx、ボタンとプログレス バーの両方を 0 に設定する必要があります。ラベルの重みを 1 に設定します。これにより、ボタンとプログレス バーがまったく拡張されなくなり、プログレス バーがすべての余分なスペースを占有できるようになります。

またgridwidth、進行状況バーの制約を 2 に設定して、実際には 2 つの列を使用します。

最後に、centerPanel配置される場所によっては、実際に拡張してコンテナーを満たすことができない場合があります。centerPanel が BorderLayout を持つ親に配置されている場合は、展開する必要があります。centerPanel.setBorder(BorderFactory.createLineBorder(Color.RED))確認するために、デバッグ用に で境界線を追加できます。これは、ボタン、ラベル、プログレス バーでも役立ちます。

于 2012-10-20T11:53:16.893 に答える