私は周りを見て回りましたが、自分の状況に合わせて具体的に調整するソリューションを見つけていません。ダイアログボックスに表示するパネルがあります。
//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です。ヘルプや提案をありがとう。
これは、コンテナーとして使用されるパネルに追加されたすべての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);
各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回以上行いたいときにヘルパーメソッドを作成するのは、幸運でした。できることには制限がなく、必要に応じてコンポーネント、支柱、接着剤を混合します。
これを行うにはもっと良い方法があると確信していますが、まだ見つけていません。また、動的なサイズ変更により、短いテキストを使用するユーザーは小さなウィンドウを使用し、多くのテキストを使用するユーザーはそれをすべてに収まるようにサイズ変更できます。
setAlignmentX
で使用できるため、パネルではJPanel
を使用する必要があります。メソッドsetAlignmentX
およびsetAlignmentY
は、JComponent
が拡張するJPanel
にあります。それは機能します...これらのメソッドを使用してJPanelsをBoxLayout
に配置するコードを持っています。
わかりました、私が答えている間に質問を編集してください:)
JPanelを使用する代わりに、 Box
を使用してみてください。 Box
クラスがコンテナーとして非常に役立つことがわかりました。 APIから:
BoxLayoutオブジェクトをレイアウトマネージャーとして使用する軽量コンテナ。 Boxは、BoxLayoutを使用するコンテナ(Box以外のコンテナも含む)に役立ついくつかのクラスメソッドを提供します。
まだご覧になっていない場合は、チュートリアル BoxLayoutの使用方法 が非常に役立ちます。