Reputation: 5106
I have this code:
import javax.swing.*;
import java.awt.*;
public class Test extends JFrame {
public Test() {
setLocationByPlatform(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setLocationByPlatform(true);
GridBagConstraints constraints = new GridBagConstraints();
constraints.anchor = GridBagConstraints.LINE_START;
constraints.insets = new Insets(5, 5, 0, 5);
JRadioButton button1 = new JRadioButton("Aaaaaaaaa");
JRadioButton button2 = new JRadioButton("Bbbb");
JRadioButton button3 = new JRadioButton("cccccC");
JPanel panel = new JPanel();
panel.setLayout(new GridBagLayout());
panel.add(new JLabel("Test"), createConstraints(0, 0));
panel.add(button1, createConstraints(0, 1));
panel.add(button2, createConstraints(1, 1));
panel.add(button3, createConstraints(2, 1));
JTextField text = new JTextField();
GridBagConstraints c = createConstraints(0, 2);
c.gridwidth = 3;
panel.add(text, c);
add(panel, BorderLayout.PAGE_START);
setSize(350, 360);
setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(() -> {
Test frame = new Test();
frame.setVisible(true);
});
}
private GridBagConstraints createConstraints(int x, int y) {
GridBagConstraints c = new GridBagConstraints();
c.anchor = GridBagConstraints.LINE_START;
c.insets = new Insets(5, 5, 0, 5);
c.gridx = x;
c.gridy = y;
return c;
}
}
It creates:
But I need the text field to always span 2 columns and everything to be left aligned:
How do I do that?
Upvotes: 0
Views: 38
Reputation: 168825
c.gridwidth = 3;
Needs to be:
c.gridwidth = 2; // unless it should fill all THREE columns!
c.fill = GridBagConstraints.HORIZONTAL;
Result:
Edit
As an aside. 'Spanning two cells' seems an entirely arbitrary way of sizing a text field. Better to specify a number of columns (roughly translates to # of characters) when it is being constructed, put it in a row of it's own (spanning 3 cell widths), and not specify it to fill that row.
Upvotes: 3