3

[挿入] メニューから [シンボル... ]を選択すると表示される Microsoft Word の [シンボル] ダイアログのような JDialog を作成しようとしています。基本的に、これは小さなボタンのn x m ( nmは実行時まで不明) グリッドです。私は GridLayout を使用してうまく動作するこの最初のバージョンを持っています。問題は、ダイアログのサイズを変更すると (サイズを変更できる必要がある場合)、ボタンのサイズが変更されることです。ボタンのサイズを一定に保つ必要があります。

しかし、ボタンを含むグリッドの寸法を変更したいです。たとえば、ダイアログの幅が広くなっても高さは変わらない場合、行数を減らして列数を増やす必要があります。

これを修正する方法をいくつか考えました。

  1. ダイアログのサイズが変更されたら、新しい GridLayout を作成し、ボタンを再設定します。これを試して様子を見ようと思いますが、やり方が下手なようです。
  2. FlowLayout など、他のタイプのレイアウトを使用します。私はこれを試してみましたが、すべてのn x mボタンを 1 行に配置しました。水平スクロールバーを使いたくないのですが、ボタンが右端からはみ出してしまいました。とにかく、ボタンの 2 次元グリッドであるはずです。

このレイアウトの問題を解決する最善の方法は何ですか?

4

4 に答える 4

5

GridLayout でボタン パネルを作成し、それに固定サイズ (もちろん実行時に計算できます) を設定します。ボタン パネルは、BoxLayout のパネルに含まれている必要があります。

BoxLayout チュートリアルをご覧ください

非常に基本的な例:

public static void main(String[] args) throws Exception
    {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel buttonPanel = new JPanel();
        JPanel containerPanel = new JPanel();
        buttonPanel.setLayout(new GridLayout(2,2));
        buttonPanel.add(new JButton("1"));
        buttonPanel.add(new JButton("2"));
        buttonPanel.add(new JButton("3"));
        buttonPanel.add(new JButton("4"));
        buttonPanel.setPreferredSize(new Dimension(300, 400));
        containerPanel.add(buttonPanel);

        frame.getContentPane().add(containerPanel);
        frame.pack();
        frame.setVisible(true);
    }
于 2011-04-20T14:39:43.083 に答える
2

ボタンの単一の列で同様の問題が発生し、MiGLayout(サードパーティ、ここで入手可能)がこれに対して単純で効果的であることがわかりました。グリッドの作成とボタンサイズの設定の両方に役立ちましたが、その構文に慣れるのに1、2日かかりました。

しかし、重要なのは実際にはボタンのサイズを設定することです。GridLayout確かに、グリッドであるレイアウトを選択する方法のようです。私はテストしていませんが、組み込みのsetXSize()メソッドも同様に機能すると思います。GridBagLayoutチュートリアルには、サイジング/ポジショニングで実行できるいくつかの例があります。

于 2011-04-20T14:42:14.193 に答える
2

ダイアログの幅が広くなっても高さは変わらない場合、行数を減らして列数を増やす必要があります。

ラップ レイアウトは、あなたが探しているものかもしれません。

于 2011-04-20T16:47:42.697 に答える
2

FlowLayout が最適な方法ですが、構成に問題がある可能性があります。親コンポーネントが使用するレイアウト マネージャーは?

于 2011-04-20T14:43:22.233 に答える