Размер кнопок внутри GridBagLayout
У меня есть массив 3 * 6 JButtons
внутри 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);
}
}
Заранее спасибо.
3 ответа
Но так как длина текста каждой кнопки может варьироваться, каждый столбец кнопок имеет немного разную ширину. Как мне сделать так, чтобы они имели одинаковую ширину?
простое решение заключается в использовании
GridLayout
GridBagLayout
Чтобы создать столбцы, Размер для каждого столбца рассчитывается изPrefferedSize
пришел от каждогоJButtons
в 1-й строке эти координаты используются для остальных строк в текущем контейнере
РЕДАКТИРОВАТЬ
но gbc.weightx и gbc.weighty могут быть использованы для деления процентов
симуляция GridLayout (важный вопрос - зачем беспокоиться)
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();
}
});
}
}
С помощью использования GridBagConstraints вы можете установить ширину равной или как вы хотите. перейдите по этой ссылке за помощью:
Попробуй это:
buttonConstraints.fill = GridBagConstraints.HORIZONTAL;