ボタンを並べて配置する
-
20-09-2019 - |
質問
ボタンを並べて配置するにはどうすればよいですか。レイアウトの設計にはgridBagLayoutを使用しました。問題は、ボタンの配置が互いに離れすぎていることです。CENTERをアンカーとして選択しようとしましたが、これによりボタンが重なってしまいます。WEST と EAST を使用すると、ボタンの位置が離れすぎます。
例えばSAVE NEW_PATTERN の代わりに ---------- NEW PATTERN を保存します。
JButton bSave = new JButton("SAVE");
JButton bPattern = new JButton("NEW_PATTERN");
con = new GridBagConstraints();
con.anchor=GridBagConstraints.WEST;
con.gridy = 3; con.gridx = 0;
con.gridwidth = 1; con.gridheight = 1;
con.insets= new Insets(2,5,2,2);
m.setConstraints(bSave, con);
c.add(bSave);
con.weightx=1;
con.gridy=3; con.gridx=0;
con.anchor=GridBagConstraints.EAST;
m.setConstraints(bPattern,con);
c.add(bPattern);
解決
AKFおかげで、私はGridBagLayoutの内側FlowLayoutのを配置することによって、問題を解決してきます。
....
JButton bSave = new JButton("Save");
JButton bPattern = new JButton("New Pattern");
JPanel pContainer = new JPanel();
pContainer.setLayout(new FlowLayout(FlowLayout.CENTER));
pContainer.add(bSave); pContainer.add(bPattern);
con = new GridBagConstraints();
con.anchor=GridBagConstraints.CENTER;
con.gridy = 3; con.gridx = 0;
con.gridwidth = 1; con.gridheight = 1;
m.setConstraints(pContainer, con);
c.add(pContainer);
....
他のヒント
のGridBagLayoutは、レイアウトの中で最も複雑です。あなただけのボタンのカップルを揃えている場合は、私はFlowLayoutの(デフォルト)またはBoxLayoutを使用することをお勧めします。しかし、2番目のボタンの1であることをgridxを調整し、代わりにアンカーを調整する、GridBagLayoutのを使用したい場合。また、わからないあなたは(他のコードが存在しない限り、あなたは0-2のgridyを使用することを省略している)の代わりに0のgridyの3のgridyを持っている理由ます。
新しい質問を投稿する前に、まず古い投稿を読んでみてはいかがでしょうか?
前回の投稿で Swing チュートリアルへのリンクが提供されました。したがって、チュートリアルを読み、例を試し、ジョブに適切なレイアウト マネージャーまたはレイアウト マネージャーの組み合わせを使用してください。
その代わりGridBagLayout
の、GridLayout
はシンプルなソリューションです。簡単にセットアップすることができます:
JButton bSave = new JButton("SAVE");
JButton bPattern = new JButton("NEW_PATTERN");
JPanel panel = new JPanel(new GridLayout(1,2); // 1 row, 2 cols
panel.add(bSave);
panel.add(bPattern);
EDITます:
ただ、好奇心から、私はあなたの元に浮気だけのGridBagLayoutの使用を可能にする組み合わせを見つけました。それはあなたのオリジナルよりもはるかに違いはありません。
GridBagConstraints con = new GridBagConstraints();
con.anchor=GridBagConstraints.WEST;
con.gridy = 3;
con.gridx = 0;
con.gridwidth = 1;
con.gridheight = 1;
con.insets= new Insets(2,5,2,2);
m.setConstraints(bSave, con);
c.add(bSave);
con.weightx=0;
con.gridy=3;
con.gridx=1;//this is the big diff!
con.anchor=GridBagConstraints.EAST;
m.setConstraints(bPattern,con);
c.add(bPattern);
このコードは、画面の中央に並んでボタン側に位置づける。
キーは次のとおりです:
constraints.fill = GridBagConstraints.NONE; - >展開していないbutonsを作る
constraints.insets.right = 0; - >ボタンが並んで立つことができる
constraints.insets.left = 0; - >ボタンが並んで立つことができる
constraints.weightx = 1 - >セルがWICHのボタンが水平にはExpandoさせる
constraints.anchor = GridBagConstraints.EAST; - >セルの
で放置ボタンを行いますconstraints.anchor = GridBagConstraints.WEST; - >は、セルの左側に立って右のボタンを作る
public static void main(String args[]){
JFrame frame=new JFrame();
Container cont=frame.getContentPane();
cont.setLayout(new GridBagLayout());
GridBagConstraints constraints=new GridBagConstraints();
constraints.insets.top=2;
constraints.insets.bottom=2;
constraints.insets.left=0;// increment to separate buttons
constraints.insets.right=0;// increment to separate buttons
constraints.fill=GridBagConstraints.NONE;
constraints.weightx=1;
constraints.gridy=0;
constraints.anchor=GridBagConstraints.EAST;
constraints.gridx=0;
cont.add(new JButton("Save"),constraints);
constraints.anchor=GridBagConstraints.WEST;
constraints.gridx=1;
cont.add(new JButton("New Pattern"),constraints);
frame.pack();
frame.setVisible(true);
}
私はそれが箱から出して最も先進的なレイアウトマネージャであり、他のものは時代遅れになりますので、あなたはGridBagLayoutのためのチュートリアルを読むことをお勧め。これは、それらの理由のための学習の価値があります。あなたはグリッドと考えると、それはすべてがシンプルになり、あなたは右のそれから取得する必要があり、すべてはあなたのコードで逃したものですx、y座標です。あなたは、ほぼありました:)
それは余分なスペースを持つコンテナを記入することになると、それらすべてがわずかに異なる仕事以来、レイアウトマネージャを混合すると、通常は非常に悪い考えです。
@camickr それは最も柔軟なもので、どのような状況で使用することができますので、私のコメントをもとに、人々はGridBagLayoutのを使用する必要があります。一つだけを持つことは簡単でかつ保守可能性を生じるはずです。私もそれが論理的にマッピングされているので、それは非常に簡単に読むことを見つけます。あなたは1つの制約を使用している場合contstraintsは明らかに悪い考えである、すべてのコンポーネントのオブジェクト変わります。