2013-04-25 77 views
2

我有一個JButtonsGridBagLayout內的3 * 6數組。但由於每個按鈕的文本長度可能不同,每列按鈕的寬度略有不同。我如何讓它們具有相同的寬度?GridBagLayout內部的按鈕大小

下面是代碼:

for (int i = 0; i < 3; i++) 
{ 
    for (int j = 0; j < 6; j++) 
    { 
     buttonConstraints.fill = GridBagConstraints.BOTH; 
     buttonConstraints.weightx = 1; 
     buttonConstraints.weighty = 1; 
     buttonConstraints.gridx = j; 
     buttonConstraints.gridy = i; 
     buttonPanel.add(buttons[i * 6 + j], buttonConstraints); 
    } 
} 

在此先感謝。

回答

5

但由於每個按鈕的文本長度可以變化,的 按鈕每一列具有稍微不同的寬度。我如何讓他們有相同的寬度 ?

  • 簡單的解決方法是使用GridLayout

  • GridBagLayout創建一個列,每個列的尺寸計算從PrefferedSize從第1行每JButtons來了,這些座標用於休息在當前的容器排

EDIT

enter image description here

import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class GridFromGridBagLayout { 

    private JFrame frame = new JFrame(); 
    private JPanel panel = new JPanel(); 

    public GridFromGridBagLayout() { 
     panel.setLayout(new GridBagLayout()); 
     GridBagConstraints gbc = new GridBagConstraints(); 
     for (int row = 0; row < 6; row++) { 
      for (int col = 0; col < 3; col++) { 
       JButton b = new JButton("(" + row + ", " + col + ")"); 
       b.putClientProperty("column", col); 
       b.putClientProperty("row", row); 
       b.addActionListener(new ActionListener() { 
        @Override 
        public void actionPerformed(ActionEvent e) { 
         JButton btn = (JButton) e.getSource(); 
         System.out.println("clicked column " 
           + btn.getClientProperty("column") 
           + ", row " + btn.getClientProperty("row")); 
        } 
       }); 
       gbc.gridx = col; 
       gbc.gridy = row; 
       gbc.gridwidth = gbc.gridheight = 1; 
       gbc.fill = GridBagConstraints.BOTH; 
       gbc.anchor = GridBagConstraints.NORTHWEST; 
       gbc.weightx = 33; 
       gbc.weighty = 20; 
       panel.add(b, gbc); 
      } 
     } 
     frame.add(panel); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     javax.swing.SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       GridFromGridBagLayout borderPanels = new GridFromGridBagLayout(); 
      } 
     }); 
    } 
} 
+0

是的。我剛纔發現我也應該使用'GridLayout'。謝謝。 – tianz 2013-04-25 10:28:25

2

在使用GridBagConstraints的幫助下,您可以將寬度設置爲相等或任意。遵循此鏈接幫助:

GridBagConstraints

+0

你可以請更具體嗎?我應該設置哪種GridBagConstraints屬性?我已經嘗試了weightx和gridwidth,但它們不起作用。謝謝。 – tianz 2013-04-25 10:20:30

+2

嘗試使用Gridlayout。 – 2013-04-25 10:28:23

-1

試試這個:

buttonConstraints.fill = GridBagConstraints.HORIZONTAL;