2017-10-03 14 views
0

GridBagLayoutに14個のボタンがあります。問題は、ボタンが開始画面からではなく、画面の中央から垂直に開始することです。また、私が望むのは、ボタンと同じサイズで、スペースを追加することです。ここでGridBagLayout画面中央からJボタンを開始

Sreenshot:

私のコードです:

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

    } 

答えて

1

あなたは同じサイズのボタンをしたい場合は、コンポーネント間のスペースを追加し、コンストラクタでのGridLayout、1を使用することを検討してください:

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

GridBagLayoutを絶対に使用する必要がある場合は、制約のfillプロパティをGridBagConstraints.HORIZONTALまたはGridBagConstraints.BOTHに設定し、アンカーを設定します新しいグリッドレイアウト(0、1、0と

![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

:画面左側のグリッドにそれらを置く、JButtonがの束を作成する例についてGridBagConstraints.WEST

またはプロパティ、5)。私はコンポーネント間にあまりにも多くのスペースがあることを除いて、すべてが問題ありません。 –

+0

@NikolaBozic:GridLayout(0、1、0、0)を使用しているときに、サイズパラメータ –

+0

を減らしてください。 –

関連する問題