14

私は周りを見回しましたが、自分の状況に合わせて特別に調整する解決策を見つけられませんでした。ダイアログボックスに表示するパネルがあります。

//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つのパネル、type5とtype6のサイズは同じサイズなので、見栄えがします。ただし、ヘッダーと最初の4つのパネルはサイズが異なるため、すべて左揃えにしてください。今のところ、これを修正する方法として良い解決策を見つけていません。

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

4

3 に答える 3

29

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

   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);
于 2012-02-09T14:08:17.877 に答える
16

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

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

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

于 2012-02-09T15:00:43.590 に答える
5

setAlignmentXで利用できるので、パネルで使用する必要がありますJPanel。メソッドsetAlignmentXsetAlignmentYJComponent、にありJPanelます。それは機能します...これらのメソッドを使用してJPanelsをに整列させるコードがありBoxLayoutます。

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

JPanelを使用する代わりに、を使用してみてくださいBoxBoxこのクラスはコンテナとして非常に便利であることがわかりました。APIから:

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

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

于 2012-02-09T14:08:17.380 に答える