7

こんにちは、私は内部に 3 つのコンポーネントを持つ JFrame を持っています。

  1. メニュー
  2. タブ付きペイン
  3. いくつかのボタンがあるパネル

当初の目標は、次のようなデザインを作成することでした。 ここに画像の説明を入力

ユーザーがアプリケーションのサイズを変更すると、すべてのサイズも変更されます。したがって、単純なグリッド レイアウトを使用すれば問題が解決するのではないかと考えたので、次のことを行うことにしました。

  1. タブ付きペインには内部にいくつかのパネルがあり、それらのパネルはグリッド レイアウトに従います。

  2. 下部のパネルはグリッド レイアウトに従います。

  3. JFrame もグリッド レイアウトに従います。

結果:

ここに画像の説明を入力

ご覧のとおり、これは私が望んでいたものではありません。ボタンが大きすぎて、アプリケーションのサイズは非常に適切に変更されます。

ここに画像の説明を入力

ボタンのサイズも変更されますが、大きすぎます。ボタン (より具体的にはボタンが含まれているパネル) に小さなサイズを設定できるようにしたいと思います。ユーザーがアプリケーションのサイズを変更すると、ボタンは垂直方向ではなく水平方向にのみサイズ変更されます。つまり、タブ付きペインのみが大きくなります。垂直に。これは達成可能ですか?gridbaglayout を検索して見つけ、少しプレイし始めましたが、何も達成しませんでした。私がなんとかしたのは次のことだけです:

ここに画像の説明を入力

良さそうですが、サイズを変更すると、次のようになります。

ここに画像の説明を入力

前もって感謝します。

4

2 に答える 2

13

BorderLayoutコンテンツペインに使用します。を使用してタブ付きペインを配置し、 を使用してBorderLayout.CENTERボタンのパネルを配置しますBorderLayout.SOUTH

于 2012-09-26T14:58:18.647 に答える
7

JFrame もグリッド レイアウトに従います。

これはあなたの問題です。代わりに、デフォルトを使用してBorderLayout(そのため、JFrame のレイアウトを GridLayout に設定する呼び出しを削除してください)、

  1. 制約付きのボタン パネルを追加しますBorderLayout.SOUTH
  2. 制約なしでタブ付きペインを追加します (つまり、制約BorderLayout.CENTER)

Swing LayoutManager チュートリアル、特にBorderLayoutに関する例を見てください。

小さな例:

import java.awt.BorderLayout;
import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.SwingUtilities;

public class TestLayout {

    protected void initUI() {
        final JFrame frame = new JFrame(TestLayout.class.getSimpleName());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JMenuBar menuBar = new JMenuBar();
        JMenu fileMenu = new JMenu("File");
        JMenuItem newItem = new JMenuItem("New...");
        JMenuItem open = new JMenuItem("Open...");
        fileMenu.add(newItem);
        fileMenu.add(open);
        menuBar.add(fileMenu);
        JTabbedPane tabs = new JTabbedPane();
        tabs.addTab("Tab 1", new JPanel());
        tabs.addTab("Tab 2", new JPanel());
        tabs.addTab("Tab 3", new JPanel());
        JPanel buttonPanel = new JPanel(new GridLayout());
        buttonPanel.add(new JButton("Button-1"));
        buttonPanel.add(new JButton("Button-2"));
        buttonPanel.add(new JButton("Button-3"));
        frame.add(tabs);
        frame.add(buttonPanel, BorderLayout.SOUTH);
        frame.setJMenuBar(menuBar);
        frame.pack();
        frame.setVisible(true);
    }

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

            @Override
            public void run() {
                new TestLayout().initUI();
            }
        });
    }
}
于 2012-09-26T14:58:37.277 に答える