2017-10-03 6 views
0

Ich habe 14 Schaltflächen in GridBagLayout. Problem ist, dass Buttons von der Mitte des Bildschirms aus, statt vom Startbildschirm, starten. Was ich auch will, ist die gleiche Größe der Tasten und dazwischen etwas Platz.GridBagLayout Start Jbuttons von der Mitte des Bildschirms

Sreenshot:

Hier ist mein Code:

private final int MAX_TABLES = 14; 
    JButton [] buttonsTables = new JButton[MAX_TABLES]; 

    frame = new JFrame("FreshPos baza podataka"); 
    frame.setExtendedState(JFrame.MAXIMIZED_BOTH); 

    //Main panel 
    JPanel panel = new JPanel();   
    panel.setLayout(new BorderLayout()); 
    frame.getContentPane().add(panel); 

    //West panel; 
    JPanel panelWest = new JPanel(new GridBagLayout());  
    panel.add(panelWest, BorderLayout.WEST); 

    GridBagConstraints c = new GridBagConstraints(); 
    c.gridx = 0; 
    c.gridy = 0; 
    c.anchor = GridBagConstraints.CENTER; 

    for (int i = 0; i < MAX_TABLES; i++) {   
     buttonsTables[i] = new JButton(tables[i]); 
     buttonsTables[i].setMaximumSize(new Dimension(Integer.MAX_VALUE, buttonsTables[i].getMinimumSize().height)); 
     panelWest.add(buttonsTables[i], c); 
     c.gridy++; 
     panelWest.add(Box.createVerticalStrut(10));      

    } 

Antwort

1

Wenn Sie die Tasten, um die gleiche Größe möchten, sollten Sie ein Gridlayout verwenden, eines mit einem Konstruktor, der Raum zwischen den Komponenten ergänzt:

new GridLayout(0, 1, 0, 5); // variable number of rows, 1 column, 5 pixels between 

Wenn Sie unbedingt ein GridBagLayout verwenden müssen, legen Sie die fill -Eigenschaft der Einschränkung auf GridBagConstraints.HORIZONTAL oder GridBagConstraints.BOTH fest, und legen Sie die Anch fest oder Eigenschaft zu GridBagConstraints.WEST

Ein Beispiel für eine Reihe von JButtons Erstellen sie in einem Gitter auf der linke Seite des Bildschirms umsetzen:

![enter image description here

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.GridBagLayout; 
import java.awt.GridLayout; 
import javax.swing.*; 

@SuppressWarnings("serial") 
public class ButtonsOnSide extends JPanel { 
    private static final String[] BTN_TEXTS = { 
      "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", 
      "Sunday", "January", "February", "March", "April", "May", "June", 
      "July", "August", "September", "October","November", "December" }; 
    private static final int PREF_W = 1000; 
    private static final int PREF_H = 800; 
    private static final int GAP = 4; 

    public ButtonsOnSide() { 
     JPanel btnPanel = new JPanel(new GridLayout(0, 1, 0, GAP)); 
     for (String btnText : BTN_TEXTS) { 
      JButton btn = new JButton(btnText); 
      btn.addActionListener(e -> System.out.println(e.getActionCommand())); 
      btnPanel.add(btn); 
     } 
     // wrapper panel to help center the button panel vertically 
     JPanel wrapperPanel = new JPanel(new GridBagLayout()); 
     wrapperPanel.add(btnPanel); 

     setBorder(BorderFactory.createEmptyBorder(GAP, GAP, GAP, GAP)); 
     setLayout(new BorderLayout()); 
     add(wrapperPanel, BorderLayout.LINE_START); // add to the left side 
    } 

    @Override 
    public Dimension getPreferredSize() { 
     if (isPreferredSizeSet()) { 
      return super.getPreferredSize(); 
     } 
     return new Dimension(PREF_W, PREF_H); 
    } 

    private static void createAndShowGui() { 
     JFrame frame = new JFrame("ButtonsOnSide"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(new ButtonsOnSide()); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(() -> createAndShowGui()); 
    } 
} 
+0

Mit neuem Gridlayout (0, 1, 0 , 5); Alles ist in Ordnung, außer ich habe zu viel Platz zwischen den Komponenten. –

+0

@NikolaBozic: dann verkleinern Sie den Parameter Größe –

+0

Meh, wenn ich GridLayout (0, 1, 0, 0) immer noch zu viel Abstand zwischen ... –

Verwandte Themen