2015-07-03 50 views
1

我想知道如何居中組件,我發現了gridBagLayout,但是我找不到讓它比它更大的方法:我的按鈕太小了。我的代碼JFrame中心組件

部分:

private void addMainButtons() { 
     JPanel container = new JPanel() { 
      private static final long serialVersionUID = -424395301619105440L; 

      @Override 
      protected void paintComponent(Graphics g) { 
       super.paintComponent(g); 
       Dimension dim = this.getSize(); 
       DateFormat format = new SimpleDateFormat("dd/MM/yyyy"); 
       Date date = new Date(); 
       g.setFont(new Font("TimesRoman", Font.PLAIN, 20)); 
       g.setColor(Color.BLACK); 
       String s = format.format(date); 
       g.drawString(s, (int) ((dim.getWidth() - s.length() - 80)/2), 20); 
      } 
     }; 
     container.setBackground(new Color(109, 69, 60)); 

     JButton productsButton = new JButton("Produits"); 
     productsButton.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       cl.show(frame, pages[1]); 
      } 
     }); 
     productsButton.setAlignmentY(Component.CENTER_ALIGNMENT); 
     productsButton.setAlignmentX(Component.CENTER_ALIGNMENT); 

     // Creating grid 
     container.setPreferredSize(new Dimension(400, 600)); 
     container.setLayout(new GridBagLayout()); 

     GridBagConstraints gbc = new GridBagConstraints(); 
     gbc.fill = GridBagConstraints.BOTH; 
     gbc.gridx = 0; 
     gbc.gridy = 0; 
     gbc.gridwidth = 2; 
     container.add(productsButton, gbc); 

     gbc.gridy = 1; 
     gbc.gridwidth = 1; 
     container.add(new JButton("Entrée"), gbc); 

     gbc.gridx = 1; 
     container.add(new JButton("Sortie"), gbc); 

     mainPage.setLayout(new BorderLayout()); 
     mainPage.add(container, BorderLayout.CENTER); 
     // End of main page 
    } 

的GridBagLayout是真的不好用,有另一種方式來Center組件?我可以使用NestedLayouts,但我不知道如何。

+0

您可以使用ipadx和ipady來影響'GridBagLayout'中組件的大小。您可能還需要使用'fill'來使組件充滿其單元的可用空間 – MadProgrammer

+0

考慮提供一個[可運行的示例](https://stackoverflow.com/help/mcve),它可以說明您的問題。這不是代碼轉儲,而是您正在做的事情的一個例子,它突出了您遇到的問題。這會減少混淆和更好的反應。你可能也想更好地解釋你的期望,說你的按鈕「很小」真的沒有幫助 – MadProgrammer

回答

1

您可以使用weightx和/或weighty以實現空間的組件將佔用量,例如,如果我這樣做

GridBagConstraints gbc = new GridBagConstraints(); 
gbc.fill = GridBagConstraints.BOTH; 
gbc.gridx = 0; 
gbc.gridy = 0; 
gbc.gridwidth = 2; 

gbc.weightx = 1; 
gbc.weighty = 1; 

container.add(productsButton, gbc); 

gbc.gridy = 1; 
gbc.gridwidth = 1; 
container.add(new JButton("Entrée"), gbc); 

gbc.gridx = 1; 
container.add(new JButton("Sortie"), gbc); 

我可以生成這個...

Big Buttons

你可以使用兩個容器,一個容納一個顯示日期的JLabel和一個包含按鈕的容器,但我懷疑這就是你真正的想法。

您可以使用ipadxipady這增加量的組件首選大小

GridBagConstraints gbc = new GridBagConstraints(); 
gbc.fill = GridBagConstraints.BOTH; 
gbc.gridx = 0; 
gbc.gridy = 0; 
gbc.gridwidth = 2; 

gbc.ipadx = 40; 
gbc.ipady = 40; 

container.add(productsButton, gbc); 

gbc.gridy = 1; 
gbc.gridwidth = 1; 
container.add(new JButton("Entrée"), gbc); 

gbc.gridx = 1; 
container.add(new JButton("Sortie"), gbc); 

Not so big buttons

,當與您現有的制約因素包括,允許你「成長」的按鈕有點。

0

嘗試下面的代碼以增加按鈕的大小,同時將每個組件添加到gridbagconstraints。根據需要更改重量/重量的值。

gbc.weightx = 1.0; 
gbc.weighty = 1.0; 

爲了在組件之間提供更多空間,請在添加每個組件到gridbagconstraints時使用以下代碼。

gbc.insets = new Insets(2, 2, 2, 2); 

據我所知,您使用正確的方法來居中組件。它也可以通過其他佈局完成,但可能有點困難。