2011-08-16 38 views
4

を使用してJPanelの中にGridBagLayoutを10(3x3 + 1)のJButtonsに使用しようとしています。GridBagLayout複数のボタン+枠線

しかし、これまでグルーボックスやそれと同様のことをしていたのですが、GridBagLayoutJPanelBoxLayoutのすべての余分なスペースを占めています。私はおそらく何かが不足しているか、これはできないのでしょうか?

私が使用した解決策の1つは、グリッドバッグレイアウト内にエキスパンド要素を入れてボタンを押し上げることです。これにより、ボタンは適切な場所に置かれますが、枠線のボックスは大きく表示されます。

import java.awt.Container; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 

import javax.swing.BorderFactory; 
import javax.swing.Box; 
import javax.swing.BoxLayout; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 

public class GridBagLayoutTest extends JFrame { 

    public GridBagLayoutTest(){ 
     super(); 
     this.setTitle("JVectorView"); 
     this.setSize(300,300); 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     Container content = this.getContentPane(); 
     content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS)); 
     content.add(new JLabel("Hello!")); 
     content.add(new Controls()); 
     content.add(Box.createGlue()); 
     this.setVisible(true); 
    } 


    private class Controls extends JPanel{ 
     private static final int WIDTH = 3, HEIGHT = 3; 

     public Controls(){ 
      GridBagConstraints constraints = new GridBagConstraints(); 

      //this.setBorder(BorderFactory.createLineBorder(Color.red)); 
      this.setBorder(BorderFactory.createTitledBorder("Some stuff")); 
      constraints.fill = GridBagConstraints.NONE; 
      this.setLayout(new GridBagLayout()); 
      for(int row = 0; row < HEIGHT; row++){ 
       for(int col = 0; col < WIDTH; col++){ 
        constraints.gridx = col; 
        constraints.gridy = row; 
        this.add(new JButton("B"+(col+row*WIDTH)), constraints); 

       } 
      } 
      constraints.gridx = 1; 
      constraints.gridy = 3; 
      this.add(new JButton("B"+(10)), constraints); 
     } 
    } 

    public static void main(String[] args) { 
     new GridBagLayoutTest(); 
    } 

} 

私は国境は、ボタンの周りにタイトになりたい:

はここに私のコード例に従います。 gridbaglayoutをコンテンツの中に崩壊させることは可能ですか、それとも常にパネルを埋めるのですか?

+0

グリッドに入れているコンポーネントの最小サイズと最大サイズを微調整してみてください。 – Marvo

+0

利用可能な 'JPanel's'領域に10個の' JButtons'を埋めたいのですか? – mKorbel

+0

+1問題のコンパイル可能な簡単な説明 –

答えて

1
JPanel p=new JPanel(new FlowLayout()); 
p.add(new Controls()); 
content.add(p); 
+0

返信いただきありがとうございますが、flowLayoutの問題は、コンポーネントの方向を制御することができないことです。この場合、それらを垂直にしたいのです。 – larlin