質問

ボタンを並べて配置するにはどうすればよいですか。レイアウトの設計には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は明らかに悪い考えである、すべてのコンポーネントのオブジェクト変わります。

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