Reputation: 1
I would like to dynamically place buttons in a JPanel. For that, I chose to apply a GridBagLayout to this panel (the one to contain the buttons).
the problem is that my buttons appear from the center of my panel while I would like them to be placed from top to bottom.
here is my code:
void placerListeUsers(){
jPanel49.setLayout(new GridBagLayout());
//jPanel49 est le panel sur lequel je place mes boutons.
//jPanel49 est placé dans une JScrollPane
GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.fill = GridBagConstraints.HORIZONTAL;
//c.anchor=GridBagConstraints.NORTH;
c.weightx = 1;
//c.weighty = 0;
for (int i = 0; i < 5; i++) {
c.gridwidth = GridBagConstraints.REMAINDER;
c.gridy = i;
jPanel49.add(new JButton("Super"), c);
}
and what he produces:
thank you for helping me fix this problem
Upvotes: 0
Views: 205
Reputation: 126
Even though you did not provide a MCVE as requested. I try to provide a solution for your layout... ;)
The problem is, as already mentioned by camickr, you need to tell GridBagLayout where to put all the extra space of your Panel after calculating the size of the buttons:
weighty needs to be set to 1 for the last button added to your panel.
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
Container content = frame.getContentPane();
GridBagLayout layout = new GridBagLayout();
JPanel panel = new JPanel(layout);
GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.fill = GridBagConstraints.HORIZONTAL;
c.anchor = GridBagConstraints.NORTH;
c.weightx = 1;
int buttonCount = 5;
for (int i = 0; i < buttonCount; i++) {
c.weighty = i == buttonCount - 1 ? 1 : 0;
c.gridwidth = GridBagConstraints.REMAINDER;
c.gridy = i;
JButton button = new JButton("Super");
panel.add(button, c);
}
content.add(new JScrollPane(panel));
frame.pack();
frame.setSize(400, 400);
frame.setVisible(true);
}
Upvotes: 0
Reputation: 324197
the problem is that my buttons appear from the center of my panel while I would like them to be placed from top to bottom.
You need to specify weightx/y constraints, otherwise the components gather in the middle.
Read the Swing tutorial on How to Use GridBagLayout. The section on Specifying Constraints will give you more information.
It looks to me like you just have vertical buttons. Maybe a GridLayout
or BoxLayout
added to the BorderLayout.PAGE_START
of the frame would be easier.
Upvotes: 1