0

自分が取り組んでいるプロジェクトのサイドバーを描画しようとしています。BoxLayoutの制限に不満を感じたため、GridBagLayoutを使用することにしました。誰かが私が間違っていることを説明するのを手伝ってもらえますか?私が欲しいのは、サイドバーに2つのJPanelを含めることです。私が持っているコードは、それらをサイドバーの上部ではなく、中間に配置します。誰かが私がここで欠けているものを説明できますか?

    JPanel sideBar = new JPanel();
    sideBar.setBounds(0, 0, 180, (int)this.getBounds().getHeight());
    sideBar.setLayout(new GridBagLayout());


    JPanel optionBar = new JPanel();
    optionBar.setBorder(BorderFactory.createTitledBorder("Box1"));
    optionBar.setLayout(new GridBagLayout());


    JPanel buttonBar = new JPanel();
    buttonBar.setBorder(BorderFactory.createTitledBorder("Options"));
    buttonBar.setLayout(new GridBagLayout());


    GridBagConstraints c = new GridBagConstraints();
    c.fill = GridBagConstraints.HORIZONTAL;
    c.gridx = 0;
    c.ipady = 5;
    c.insets = new Insets(10,0,0,0);


    JButton simplify;
    simplify = new JButton("Open");
    simplify.addActionListener( this.listener );
    c.gridy = 0;
    buttonBar.add(simplify, c);

    JButton mergeButton;
    mergeButton = new JButton("Close");
    mergeButton.addActionListener( this.listener );
    c.gridy = 1;
    buttonBar.add(mergeButton, c);

    JButton splitButton;
    splitButton = new JButton("Merge");
    splitButton.addActionListener( this.listener );
    c.gridy = 2;
    buttonBar.add(splitButton, c);

    c.insets = new Insets(0,5,5,5);
    c.gridy = 0;
    sideBar.add(optionBar, c);

    c.gridy = 1;
    c.ipadx = 70;
    sideBar.add(buttonBar, c);

    return(sideBar);
4

3 に答える 3

2

GridBagLayoutは、コンポーネントが必要とする十分な垂直スペースのみを割り当て、残りは空白のままにします。サイドバーのコンポーネントが垂直方向の中央に配置されていると思いますか?

コンポーネントを「押し出す」には、垂直方向のウェイトを設定する必要があります。weighty最後のコンポーネントで制約を1.0に設定すると、そのコンポーネントの残りの垂直方向のスペースがすべて占有され、残りが一番上にプッシュされます。(最後のパネルをに固定する必要がある場合もありますGridBagConstraints.NORTH)。

c.weighty = 1.0前に試すsideBar.add(buttonBar, c);

于 2009-12-15T04:40:00.470 に答える
2

HTMLに精通している/慣れている場合は、table2gridbagを使用できます。これは、レイアウトの説明(HTMLテーブル)を取得し、それをGridBagLayoutマネージャーを構成するための同等のレイアウトの説明に変換する小さなコンソールツールです。

于 2010-09-16T14:45:22.130 に答える
0

私が持っているコードは、それらをサイドバーの上部ではなく、中間に配置します。

レイアウトマネージャーを適切に使用する方法を学ぶために、 Swingチュートリアルを読むことから始める必要があります。BoxLayoutは、制約を指定する方法を学ぶ必要がないため、GridBagLayoutよりもはるかに簡単です。ただし、GridBagLayoutを使用する場合は、「GridBagLayoutの使用方法」のセクションをお読みください。「weightxおよびweighty」制約を扱うセクションに集中することをお勧めします。問題の解決に役立つはずの私の限られた知識に基づいています。

また、レイアウトマネージャーを使用する場合は、setBounds()またはsetSize()を使用しません。

于 2009-12-15T04:01:36.587 に答える