2016-05-19 3 views
0

Ich möchte ein Raster von Schaltflächen erstellen. Zwischen den Tasten sollte kein Leerzeichen stehen, damit die Tasten die nächsten Tasten berühren.Java GUI Swing, Schaltflächen in GridLayout ohne Leerzeichen zwischen den Schaltflächen

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

mit dem Raster-Layout Ich versuchte, ein 10x10 Raster von Tasten zu bekommen. Aber obwohl ich das GridLayout mit den Parametern 10,10,0,0 erstellt habe, gibt es ein Leerzeichen zwischen den Buttons. Wo ist mein Fehler?

Antwort

1

Es ist, weil createButton ist eigentlich eine JPanel, die eine FlowLayout als Layout-Manager standardmäßig hat. Machen Sie createButton eine Methode, die eine JButton zurückgibt und die Schaltfläche über den gesamten Raum innerhalb der Zelle erstreckt. (Sie können die setPreferredSize() entfernen). Wenn Sie möchten, dass die Schaltflächen 10x10 Pixel bleiben und innerhalb des Rahmens zentriert sind: Setzen Sie den Layout-Manager des Hauptbereichs auf GridBagLayout und fügen Sie einen JPanel mit dem GridLayout hinzu. Überschreiben Sie möglicherweise auch getPreferredSize() der Schaltflächen, anstatt setPreferredSize() aufzurufen.


Buttons über gesamten Bildschirm Spanning:

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

Buttons restlichen 10x10:

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); 
    } 
} 
Verwandte Themen