web-dev-qa-db-ja.com

java BoxLayoutパネルの配置

私は周りを見て回りましたが、自分の状況に合わせて具体的に調整するソリューションを見つけていません。ダイアログボックスに表示するパネルがあります。

//create dialog panel
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel.add(headerPanel);
panel.add(type1Panel);
panel.add(type2Panel);
panel.add(type3Panel);
panel.add(type4Panel);
panel.add(type5Panel);
panel.add(type6Panel);

int result = JOptionPane.showConfirmDialog(null, panel, "Please enter values.", JOptionPane.OK_CANCEL_OPTION);

最後の2つのパネルのタイプ5とタイプ6のサイズは同じなので、見栄えがします。ただし、ヘッダーと最初の4つのパネルはサイズが異なるため、すべて揃えておきます。今のところ、これを修正する方法として私は良い解決策を見つけていません。

問題は、最初の5つのパネルを左揃えにし、最後の2つのパネルを揃えないようにするにはどうしたらよいですか?そうでなければ、どうすればそれらすべてを左揃えにできますか? setalignmentx()はパネルでは使用できません。 GridLayoutを使用してみましたが、GUIのメインウィンドウの幅はかなり大きく、画面にうまく収まらないため、Y軸に沿ったBoxLayoutです。ヘルプや提案をありがとう。

12
whitewolfpgh

これは、コンテナーとして使用されるパネルに追加されたすべてのJPanelsを左揃えにする例です。

   JPanel a = new JPanel();
   JPanel b = new JPanel();
   JPanel c = new JPanel();

   a.setBackground( Color.RED );
   b.setBackground( Color.GREEN  );
   c.setBackground( Color.BLUE );

   a.setMaximumSize( new Dimension(  10, 10) );
   b.setMaximumSize( new Dimension(  50, 10) );

   a.setAlignmentX( Component.LEFT_ALIGNMENT );//0.0
   b.setAlignmentX( Component.LEFT_ALIGNMENT );//0.0
   c.setAlignmentX( Component.LEFT_ALIGNMENT );//0.0

   JPanel panel = new JPanel();
   panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
   panel.add(a);
   panel.add(b);
   panel.add(c); 

   int result = JOptionPane.showConfirmDialog(null, panel, "Please enter values.", JOptionPane.OK_CANCEL_OPTION);
26
cdc

各typenPanelオブジェクトを含む水平のjavax.swing.Boxオブジェクトを作成します。水平支柱と接着剤を使用して、好きなことができます:

Box  b1 = Box.createHorizontalBox();
b1.add( type1Panel );
b1.add( Box.createHorizontalGlue() );
panel.add( b1 );

簡単にするために、これを行うヘルパーメソッドを記述します。

private Component leftJustify( JPanel panel )  {
    Box  b = Box.createHorizontalBox();
    b.add( panel );
    b.add( Box.createHorizontalGlue() );
    // (Note that you could throw a lot more components
    // and struts and glue in here.)
    return b;
}

次に:

panel.add( leftJustify( headerPanel ) );
panel.add( leftJustify( type1Panel ) );
panel.add( leftJustify( type2Panel ) );

etc ....コンポーネント、接着剤、支柱を追加して、各ラインをより洗練されたものにすることができます。縦と横のボックスを深く入れ子にし、同じレイアウトをボックス内で2回以上行いたいときにヘルパーメソッドを作成するのは、幸運でした。できることには制限がなく、必要に応じてコンポーネント、支柱、接着剤を混合します。

これを行うにはもっと良い方法があると確信していますが、まだ見つけていません。また、動的なサイズ変更により、短いテキストを使用するユーザーは小さなウィンドウを使用し、多くのテキストを使用するユーザーはそれをすべてに収まるようにサイズ変更できます。

13
RalphChapin

setAlignmentXで使用できるため、パネルではJPanelを使用する必要があります。メソッドsetAlignmentXおよびsetAlignmentYは、JComponentが拡張するJPanelにあります。それは機能します...これらのメソッドを使用してJPanelsをBoxLayoutに配置するコードを持っています。

わかりました、私が答えている間に質問を編集してください:)

JPanelを使用する代わりに、 Box を使用してみてください。 Boxクラスがコンテナーとして非常に役立つことがわかりました。 APIから:

BoxLayoutオブジェクトをレイアウトマネージャーとして使用する軽量コンテナ。 Boxは、BoxLayoutを使用するコンテナ(Box以外のコンテナも含む)に役立ついくつかのクラスメソッドを提供します。

まだご覧になっていない場合は、チュートリアル BoxLayoutの使用方法 が非常に役立ちます。

5
Paul