5

画像に示されているコンポーネントを表示する必要があるJPanelの最善のアプローチ/ LayoutManagerは何ですか? (ウィンドウのサイズが変更された場合、フィールドは水平方向にサイズ変更する必要がありますが、ラベルは変更しないことに注意してください)。

私は現在、GridBagLayoutでそれをやろうとしています(そして苦労しています)。これは正しいアプローチですか、それともより良い方法がありますか? 別々のセクションを分割して征服しようとする必要がありますか?

ご意見やアドバイスをいただければ幸いです。:-)

http://img261.imageshack.us/img261/2091/layouthb6.png

PS これを読んで画像がない場合は、修正しますのでご了承ください。

4

13 に答える 13

11

ネスティングを見てみますJPanels。各行を別々JPanelにしてから、スタックするのは非常に簡単JPanelsです。

それ以外の場合は、を使用できますGridBagLayout。これは、コンポーネントを配置する場所をより細かく制御するために使用するものです。

を使用GridBagLayoutすると、をインクリメントしてからリセットし、次の行に移動することで行をレイアウトできます。GridBagConstraint.gridxGridBagConstraint.gridx = 0GridBagConstraint.gridy++

于 2009-01-09T14:52:11.317 に答える
4

サードパーティの無料のレイアウト マネージャーをお勧めします。MigLayoutが頭に浮かびます (リンクされたページの下部にあるフォームの例を確認してください)、またはJGoodies FormLayoutは、これらのようなフォームに特に適しています。

標準のレイアウト マネージャーは優れていますが、このような画面で頻繁に使用するにはまったく不十分です (Netbeans で Matisse デザイナーが使用する新しい GroupLayout は、無駄に構築されたわけではありません)。リンクされたレイアウト マネージャーは、IMHO の使用と保守がはるかに簡単です。

于 2009-01-09T15:17:15.353 に答える
1

外部コードを使用できる場合は、JGoodiesレイアウトマネージャーをご覧ください。

個人的には、GridBagLayoutは、それを回避するために独自のレイアウトマネージャーを作成した範囲で、その価値よりも厄介であると感じています。

于 2009-01-09T15:11:55.113 に答える
1

個人的にはGroupLayoutの方が好きです。

GUI ビルダーを使用していない場合でも、手動でレイアウトを使用できます。概念を理解していれば、かなりシンプルで簡単に操作できます。

于 2009-01-09T15:14:12.177 に答える
0

Java SE 6以降、GroupLayoutを使用できます

それは非常に簡単で、あなたが望むように見えます。

このウィンドウの場合:

代替テキストhttp://img165.imageshack.us/img165/8237/sampleusinggrouplayoutca2.png

私はこのコードを持っています:

    // Layout the components using the new GroupLayout added
    // in java 1.6.
    // Adding to the main frame
    private void layoutComponents(){
        JPanel panel = new JPanel();

        GroupLayout layout = new GroupLayout(panel);
        panel.setLayout(layout);

        layout.setAutoCreateGaps(true);         
        layout.setAutoCreateContainerGaps(true);

        SequentialGroup hGroup = layout.createSequentialGroup();

        JLabel nameLbl  = new JLabel("Name");
        JLabel countLbl = new JLabel("Amount");
        JLabel dateLbl  = new JLabel("Date(dd/MM/yy)");
        hGroup.addGroup(layout.createParallelGroup().
                addComponent(nameLbl).
                addComponent(countLbl).
                addComponent(dateLbl).
                addComponent(go));

        hGroup.addGroup(layout.createParallelGroup().
                addComponent(name).
                addComponent(count).
                addComponent(date));

        layout.setHorizontalGroup(hGroup);

        SequentialGroup vGroup = layout.createSequentialGroup();

        vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
                addComponent(nameLbl).
                addComponent(name));

        vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
                addComponent(countLbl).
                addComponent(count));

        vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
                addComponent(dateLbl).
                addComponent(date));

        vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
                addComponent(go));
        layout.setVerticalGroup(vGroup);

        frame.add( panel , BorderLayout.NORTH );
        frame.add( new JScrollPane( textArea ) );
    }
于 2009-01-10T16:06:45.517 に答える
0

TableLayout が私の選択です。自動サイズ変更には TableLayout.FILL などの定数を使用し、固定のピクセル幅を指定できます。

テーブルレイアウト

于 2009-01-09T15:28:18.683 に答える
0

レイアウトを HTML テーブルとして記述し、次のツールを使用できます: http://www.onyxbits.de/content/blog/patrick/java-gui-building-gridbaglayout-manager-made-easy

GridBagLayout を構成するために、レイアウトを Java コードに変換します。

于 2009-04-16T22:38:15.680 に答える
0

これには間違いなくGridBagLayoutが最適です。そして、NetBeans Matisseはおそらくこれを実現する最速の方法です。別の IDE を使用している場合は、自動生成されたコードをコピーして貼り付けてください。

于 2009-01-10T16:37:04.770 に答える
0

あなたのレイアウトは、本質的に「線」で構成されているように見えます。個人的には、次のようにします。

  • Box.createVerticalBox(); で垂直ボックスを作成します。これにより、コンポーネントが垂直に積み重ねられます。実際には、行を追加できます
  • 行ごとにパネルを作成します。JPanel を BorderLayout (および左側のラベル、中央コンポーネントとしてテキスト フィールド) で使用するか、Box.createHorizo​​ntalBox() を使用して、それにラベルとテキスト フィールドを追加できると思います。 、適切な最小/推奨サイズ
  • 行区切りが必要な垂直ボックスに「ストラット」を追加できます
  • ラベル/フィールドの 2 つのグループを含む行には、少し特別な処理が必要ですが、基本的には、内部に 2 つの「行」がある水平なボックスです。

個人的には、バージ ポールで GridBagLayout に触れることはありません。多分それは私だけかもしれませんが、並行アルゴリズムとマシンコードプログラミングはGridBagLayoutを理解するよりも簡単だと思います...

于 2009-01-09T15:55:51.110 に答える
0

GridBagLayout、 もちろん。

フォームがこれだけの場合、複数の が必要ですJPanel。(ボタンがある場合は、その場所/方法によっては、おそらくもう 1 つ必要です)

フィールド 0 ~ 4 および 9 はgridwidth4 に設定され、その他はデフォルト (1 ですが、1 に設定する必要はありません)

フィールドのグループ間の「スペース」は、インセットを介して実現できます。

(少なくともこのレイアウトについては) サードパーティのレイアウト マネージャーはお勧めしません。GridBagLayout複雑ではありません。慣れるまでに(少し)時間がかかります。

Visual Editor + Eclipse を使用すると、これらを簡単に行うことができます。(私は Netbeans とそのスイング開発にあまり慣れていません。試してみましたが、恋に落ちることはありませんでした。たぶん、私は Eclipse に夢中になっています)

于 2009-01-10T21:17:22.943 に答える
0

Netbeans が GUI ビルダーを発表するまでは、swing レイアウトを行うのが本当に嫌いでした。ここでデモを見ることができます。http://rghosting.co.cc

于 2009-01-10T13:21:57.240 に答える