I have an 3 * 6 array of JButtons
inside a GridBagLayout
. But since the text length of each button may vary, each column of buttons has slightly different width. How do I make them have the same width?
Here is the code:
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);
}
}
Thanks in advance.
But since the text length of each button may vary, each column of buttons has slightly different width. How do I make them have the same width?
simple solution is to use GridLayout
GridBagLayout
to create a columns, Dimension for each of column is calculated from PrefferedSize
came from every JButtons
in 1st row, these coordinates are used for rest of rows in the current container
EDIT
but gbc.weightx and gbc.weighty can be used for percentages divide
simulating GridLayout (important question is why bothering with that)
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();
}
});
}
}