2017-10-03 1 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과, 하나를 사용하는 것이 좋습니다 :

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

절대적으로 GridBagLayout을 사용해야하는 경우 제약 조건의 fill 속성을 GridBagConstraints.HORIZONTAL 또는 GridBagConstraints.BOTH으로 설정하고 anch

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

새 GridLayout과 (0, 1, 0 : 또는 재산 화면의 왼쪽에 그리드에 그들을 가하고, JButton의 한 무리를 작성하는 예를 들어 GridBagConstraints.WEST

에 , 5); 모든 구성 요소 사이에 너무 많은 공간이 있다는 것을 제외하고는 모든 것이 좋습니다. –

+0

@NikolaBozic : 그때 사이에 많은 공간에 GridLayout (0, 1, 0, 0)을 사용할 때 –

+0

Meh, 크기 매개 변수를 줄이십시오. –