1

ボタンを並べて配置するにはどうすればよいですか。gridBagLayout を使用してレイアウトを設計しました。問題は、ボタンの配置が互いに離れすぎていることです。CENTER をアンカーとして選択しようとしましたが、ボタンが重なってしまいます。WEST と EAST を使用すると、ボタンが離れすぎて配置されてしまいます。

例 SAVE NEW_PATTERN の代わりに SAVE ---------- 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);
4

6 に答える 6

2

akf に感謝します。flowLayout を gridBagLayout 内に配置することで問題を解決しました。

....
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);
....
于 2009-10-08T02:34:00.953 に答える
1

GridBagLayout は最も複雑なレイアウトです。いくつかのボタンを配置するだけの場合は、FlowLayout (デフォルト) または BoxLayout を使用することをお勧めします。ただし、GridBagLayout を使用する場合は、アンカーを調整する代わりに、2 番目のボタンの gridx を 1 に調整します。また、0 の gridy ではなく 3 の gridy を使用する理由がわかりません (0-2 の gridy を使用する省略した他のコードがない限り)。

于 2009-10-08T01:35:57.803 に答える
0

このコードは、ボタンを画面の中央に並べて配置します。

キーは次のとおりです。

Constraint.fill=GridBagConstraints.NONE;--> ボタンを展開しないようにします

Constraint.insets.right=0;--> ボタンを横に並べます

Constraint.insets.left=0;--> ボタンを横に並べます

Constraint.weightx=1 --> ボタンが水平方向に展開されるセルを作成します

Constraint.anchor=GridBagConstraints.EAST;--> 左ボタンがセルの位置に立つようにします

Constraint.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);
    }
于 2009-10-08T10:18:32.313 に答える
0

GridBagLayout のチュートリアルを読むことをお勧めします。これはすぐに使用できる最も高度なレイアウト マネージャーであり、他のものを時代遅れにするからです。これらの理由から、学ぶ価値は十分にあります。それをグリッドと考えると、すべてが簡単になり、正しく取得する必要があるのは、コードで見逃していた x 座標と y 座標だけです。あなたはほとんどそこにいました:)

通常、複数のレイアウト マネージャーを混在させることは非常に悪い考えです。なぜなら、余分なスペースをコンテナーに入力する場合、すべてのレイアウト マネージャーの動作がわずかに異なるからです。

@camickr私のコメントに基づいて、GridBagLayoutは最も柔軟であらゆる状況で使用できるため、GridBagLayoutを使用する必要があります。1 つしかない場合は、シンプルで保守しやすい結果になるはずです。また、論理的にマッピングされているため、非常に読みやすいと思います。制約は、すべてのコンポーネントに対して 1 つの制約オブジェクトを使用する場合にのみ変更されますが、これは明らかに悪い考えです。

于 2009-10-08T09:11:34.357 に答える
0

の代わりにGridBagLayoutGridLayoutシンプルなソリューションです。セットアップは簡単です:

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

編集:

好奇心から、私はあなたのオリジナルをいじっていて、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);
于 2009-10-08T01:50:59.420 に答える
0

新しい質問を投稿する前に、まず古い投稿を読んでみませんか?

前回の投稿で Swing チュートリアルへのリンクを提供しました。チュートリアルを読み、例を試して、適切なレイアウト マネージャーまたはレイアウト マネージャーの組み合わせを使用してください。

于 2009-10-08T01:46:00.497 に答える