2016-05-19 6 views
0

ボタンのグリッドを作成したい。ボタンの間にスペースがあってはならないので、ボタンが次のボタンに触れる。Java GUIスウィング、ボタン間のスペースなしのGridLayoutのボタン

import javax.swing.*; 
import java.awt.*; 
import javax.swing.border.*; 
public class Bild extends JFrame { 
    public static class createButton extends JPanel { 
     public createButton() { 
      JButton b = new JButton(); 
      Border border = new LineBorder(Color.BLACK, 1); 
      b.setBorder(border); 
      b.setBackground(Color.WHITE); 
      b.setPreferredSize (new Dimension(10,10)); 
      this.add(b); 
     } 
    } 

    public Bild() { 
     GridLayout layout = new GridLayout(10,10,0,0); 
     this.setLayout(layout); 
     for (int i = 0; i < 100; i++) { 
      this.add(new createButton()); 
     } 
    } 
} 

import javax.swing.*; 
import java.awt.*; 
public class Main{ 
    public static void main (String[] args) { 
     JFrame frame = new Bild(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(500,500); 
     frame.setVisible(true); 
    } 
} 

グリッドレイアウトで10x10グリッドのボタンを取得しようとしました。しかし、私はパラメータ10,10,0,0でGridLayoutを作成しましたが、ボタンの間にスペースがあります。 私のミスはどこですか?

答えて

1

createButtonは実際にはなので、デフォルトではレイアウトマネージャーとしてFlowLayoutとなっています。 createButtonJButtonを返すメソッドにすると、ボタンはセル内の全領域にまたがります。 (setPreferredSize()は削除できます)。ボタンを10×10ピクセルのままにしてフレーム内の中央に配置する場合:メインパネルのレイアウトマネージャーをGridBagLayoutに設定し、JPanelGridLayoutを追加します。 setPreferredSize()を呼び出すのではなく、ボタンのgetPreferredSize()を上書きすることもできます。画面全体にまたがっ


ボタン:

class Bild extends JFrame { 

    public JButton createButton() { 
     JButton b = new JButton(); 
     Border border = new LineBorder(Color.BLACK, 1); 
     b.setBorder(border); 
     b.setBackground(Color.WHITE); 
     return b; 
    } 

    public Bild() { 
     setLayout(new GridLayout(10, 10)); 
     for (int i = 0; i < 100; i++) { 
      add(createButton()); 
     } 
    } 
} 

ボタン残りの10×10:

class Bild extends JFrame { 

    public JButton createButton() { 
     JButton b = new JButton() { 
      @Override 
      public Dimension getPreferredSize() { 
       return new Dimension(10, 10); 
      } 
     }; 
     Border border = new LineBorder(Color.BLACK, 1); 
     b.setBorder(border); 
     b.setBackground(Color.WHITE); 
     return b; 
    } 

    public Bild() { 
     JPanel panel = new JPanel(new GridLayout(10, 10)); 
     for (int i = 0; i < 100; i++) { 
      panel.add(createButton()); 
     } 
     setLayout(new GridBagLayout()); 
     add(panel); 
    } 
} 
関連する問題