4

ここに画像の説明を入力

写真に示すように、最初に 2 つのパネルがあります: topPanel と btmPanel です。topPanel は別の 2 つのパネルで構成されており、1 つは黒で塗りつぶされ、もう 1 つはグレーで塗りつぶされていますが、これは問題ではありません。

btmPanel には、すべて GridbagLayouts にある 3 つのパネルがあり、各パネルには異なる量の JButtons があります。問題は、3 番目のパネルに JButtons が多いことです。それは可能ですか?

ありがとう。

4

2 に答える 2

2

これら 3 つのパネルの制約を設定するときは、必ず

  1. GridBagConstraint プロパティweightyを 0 より大きい値 (1.0 など) に設定します。
  2. プロパティanchorNORTHまたはNORTHEASTまたはに設定しますNORTHWEST

もちろん、プロパティはまたはにfillのみ設定できます。そうしないと、すべてのパネルが垂直方向に引き伸ばされます。これは望ましくないと思います。NONEHORIZONTAL

これが私が説明するものの例です。3 つの大きなパネルを 3 つのボタンに置​​き換えることでケースを単純化しました (そのうちの 1 つは他のボタンよりも高くなっています)。

結果 (上に 3 つのボタンがどのように配置されているかを確認してください):

ここに画像の説明を入力

import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class TestLayout {

    protected void initUI() {
        final JFrame frame = new JFrame(TestLayout.class.getSimpleName());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel btmPanel = new JPanel(new GridBagLayout());
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.weighty = 1.0;
        gbc.weightx = 1.0;
        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.insets = new Insets(5, 5, 5, 5);
        gbc.anchor = GridBagConstraints.NORTH;
        JButton comp = new JButton("Panel-1");
        btmPanel.add(comp, gbc);
        JButton comp2 = new JButton("Panel-2");
        btmPanel.add(comp2, gbc);
        JButton comp3 = new JButton("Panel-3");
        comp3.setPreferredSize(new Dimension(comp.getPreferredSize().width, comp.getPreferredSize().height + 10));
        btmPanel.add(comp3, gbc);
        frame.add(btmPanel);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new TestLayout().initUI();
            }
        });
    }
}
于 2012-10-10T14:31:35.913 に答える
1

のレイアウトbtmPanelGridLayout(1, 3, 5, 5); に設定するだけです。、それはそれらを上に揃えます。現在、 のデフォルトのレイアウトbtmPanelは FlowLayout であるため、この問題が発生しています。この上に、btmPanelこれらの 3 つJPanelの がありGridBagLayoutます。

于 2012-10-10T16:15:52.257 に答える