質問

みんなはどの Java GUI レイアウト マネージャーを使っていますか?最近、私が使っているのは、 ミグレイアウト, 、いくつかの強力なコンポーネント コントロールを備えています。他の開発者が標準の JDK 以外に何を使用しているのかを知りたかっただけです。

役に立ちましたか?

解決

MiGレイアウト は、Java 開発者によって広く使用されている GUI レイアウト マネージャーです。

他のヒント

グリッドバッグレイアウト 使用可能です。使い方に慣れてしまえば、とても効果的です。標準の JDK レイアウト マネージャーは、それ自体で非常に強力だと思います。さらに、サードパーティのライブラリへの依存を最小限に抑えることができます。

MiG と FormLayout (JGoodies) はどちらも手動レイアウトに優れています (そして、最終的にはほとんどすべてのレイアウトが手動になります)。私の最大のアドバイスは、アプリケーションに影響を与えることなく、レイアウトを完全に削除して再実装できるようにビューを設計することです (ここでは、ビューとコントローラーを適切に分離することが重要です)。

「ダム」ビューを実装するための JGoodie の PresentationModel アプローチをぜひ見てください。私はこのテクニックを GUI ビルダー (Jigloo GUI ビルダー プラグインで GroupLayout を使用) で使用して、簡単なプロトタイプを作成します。3 回または 4 回の反復の後、通常は問題が解決し、MiG または FormLayout を使用して再実装します。

編集:これを書いて以来、すべてのレイアウトに MiG を使用するようになり、GUI ビルダーは使用しなくなりました。MiG を使用してレイアウトするのはあまりにも簡単です。

私が最後に取り組んだ Swing アプリケーションは、 JGoodies の FormsLayout.

私が使用するのは、 グリッドバッグレイアウト. 。多くのコードが必要なようですが、非常に見栄えの良いレイアウトが作成されます。

組み合わせるのも好きです ボーダーレイアウト GridBagLayout パネルを使用すると、優れたカスタマイズ性を実現できます。

私は使用の大ファンです テーブルレイアウト GridBagLayout の代わりに。すべてが理にかなっていますが、GridBagLayout を使おうとするたびに心が打ち砕かれます。

私はコントロールに GridBagLayout を使用していましたが、java1.6 以降は使用するつもりです グループレイアウト すごいですね。

これを使用するためのスクリーンショットとサンプルコードをここに示します。

代替テキスト http://img145.imageshack.us/img145/7844/screenshot1dz8.png

    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 ) );
    }

私が使う デザイングリッドレイアウト 私のパネルのほとんどに。

珍しいパネルについては、 DesignGridLayout 完全に処理できないため、ボーダーレイアウトと DesignGridLayout.

DesigngridLayout を使用すると、入力と読み取りが容易な最小限のコード行でレイアウトを手動でコーディングできます。

DesignGridLayouut layout = new DesignGridLayout(myPanel);
layout.row().grid(lblFirstName).add(txfFirstName).grid(lblSurName).add(txfSurName);
layout.row().grid(lblAddress).add(txfAddress);
layout.row().center().add(btnOK, btnCancel);

パネル グリッドの各行は、1 行のコードで定義されます。ご覧のとおり、パネルを「描画」するのは非常に簡単です。

さらに、私が見つけたのは、 DesignGridLayout いくつかのユニークな機能があります (「スマートな垂直サイズ変更").

GridBagLayout は強力ですが、非常に原始的です。レイアウトを結び付けるコードは非常に冗長です。このユーティリティ ライブラリ (実際には約 10 クラスを含む 1 つの jar ファイル) により、多くの作業が簡素化されます。 http://code.google.com/p/painless-gridbag/ 次のスニペットはそのサイトのホームページから引用されています。

    PainlessGridBag gbl = new PainlessGridBag(getContentPane(), false);

    gbl.row().cell(lblFirstName).cell(txtFirstName).fillX()
             .cell(lblFamilyName).cell(txtFamilyName).fillX();
    gbl.row().cell(lblAddress).cellXRemainder(txtAddress).fillX();

    gbl.doneAndPushEverythingToTop();

全体的な概要としては、私がかなり前に sun で書いた記事が役に立つかもしれません。最新のレイアウト マネージャーには対応していませんが、1 つのレイアウトですべてを実行しようとするのではなく、レイアウト マネージャーを効果的にネストすることに重点を置いています。

見る http://developer.java.sun.com/developer/onlineTraining/GUI/AWTLayoutMgr

重要な GUI では、メイン パネルにサブパネルが入れ子になった複数のレイアウトを使用していることがわかりました。 GridBagLayout また、各サブパネル (通常は境界線やパネルであることの表示がない) は、可能な限り単純なレイアウトを使用します。通常、私は使用します BorderLayout, FlowLayout, 、 そして BoxLayout より小さく、よりシンプルなサブパネル用。GUI の小さなセクションをサブパネルに分割し、可能な限り単純なレイアウトを使用して GUI のそのセクションを制御することにより、あまり頭を悩ませることなく、複雑で適切に配置された表示を作成できます。 GridBagLayoutには多くのオプションがあります。また、同様の表示機能をパネルにグループ化することで、より読みやすいコードが作成されます。

スプリングレイアウト これは、netbeans の一部である仮数 gui ビルダー用に開発されました。

使ったことがある グループレイアウト 同じように。繰り返しますが、これは Java6 の時点では標準の JDK レイアウト マネージャーですが、別個のライブラリも見つけることができます。

私は常に GridBagLayout の大ファンです。これは HTML テーブルによく似ているため、Web プログラマーにとって直感的です。

私はさまざまなネストされたレイアウトを使用することから始め、その後 GridBagLayout に移行しました (これはかなりイライラします)。それ以来、FormLayout を試してみましたが (ただし、フォーム以外には適していないことがわかりました)、TableLayout にしっかりと落ち着きました。全体的には非常に満足しています。

それ以来、私は MiGLayout を発見し、遊んでいる以上のことはしていませんが、非常に有能で、TableLayout に非常によく似ており、おそらくもう少しクリーンなようです。

私にとって大きなプラスは、MiGLayout が JDK の一部になる予定であることです。そのため、JDK が組み込まれた場合は、それをほぼ独占的に使用するつもりです。

もう 1 つ覚えておくべきことは、どの重量の LayoutManager を選択しても、GridLayout などのより単純なレイアウト マネージャーの場所が常に存在するということです。GridBagLayout を使用すると、もっと単純なレイアウト マネージャーを使用すればもっと簡単に実行できたはずの恐ろしいことがいくつか行われているのを見てきました。

私はサードパーティのライブラリへの依存関係を最小限に抑えることを好むため、通常、ダイアログには BoxLayout を使用し、「複雑な」レイアウトには GridBagLayout を使用します。GridBagLayout は理解するのは簡単ですが、設定するのが少し難しいです。私は HTML レイアウトからコードを作成するツールを自分で書きました (他の人にも役立つことを願っています)。http://www.onyxbits.de/content/blog/patrick/java-gui-building-gridbaglayout-manager-made-easy

私が見つけた唯一のレイアウトマネージャー、実際に のように それは 相対レイアウトマネージャー. 。相対レイアウト マネージャーは、ダイアログ ボックスの動作と一貫した方法で動作します。 概念的に 整頓された。1 つの欠点は、このレイアウト マネージャーが付加的な制約を扱うことです。します ない 比率の制約を扱っているようです。幸いなことに、これは非常にうまく設計されているため、この機能を実装することができました。

私が使う ボーダーレイアウト 90% の時間はネスト中です ボックスレイアウト そして SpringLayout

私は Java の初心者です。

GridBagLayoutを試して諦めて、BoxLayoutを試して諦めて、自分で作りました カスタムレイアウト それはうまくいきました。GridBag と Box では、私が最善の推測を加えた結果、レイアウト エンジンは、明確なデバッグ方法がないにもかかわらず、何か別のことを実行することを決定しました。

カスタム レイアウトを使用すると、座標、幅、高さを印刷して、どこが間違っているかを見つけることができました。配置するのは少し数学的ですが、組み込みのレイアウト マネージャーの限られた語彙ではなく、Java のフルパワーを使用できます。

もちろん、これは家庭用のプロジェクトであり、職場でこれを行うことは決して許可されません。

フォームのようなレイアウトには GridBagLayout を使用し、単純なレイアウトには BorderLayout を使用し、間にスペースがある水平方向のアイコン/ボタンの数には FlowLayout を使用します。Netbeans は、多くの面倒なレイアウト コーディングを回避して時間を節約できる優れた GUI ビルダーでもあります。

最近Swingを使い始めて、GridBagLayoutを使っています。

私は、多くのセットアップが必要で、読みにくく、手動で行うのが面倒なレイアウトマネージャーにうんざりしていました。そこで、各コンポーネントを所定の位置に維持する 2 つのフォトコーナーの抽象化を使用する、独自の非常にシンプルなレイアウトマネージャーを作成しました。次のようにコンポーネントを追加できます。 parent.add(child,"topleft(0, 0.5)bottomright(0.5,1.0)");

ここを見てください https://github.com/hageldave/UsefulStuff/blob/master/src/PhotoCornersLayout.java ;)あなたは自分で正しいレイアウトを担当していますが、それはあなたのレイアウトのオーバーラップやその他のショートコミングをチェックしていないからです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top