I have 3 JPanel
components. Panel 1 is set to BorderLayout.NORTH
, panel 2 is set to BorderLayout.CENTER
and panel 3 is set to BorderLayout.SOUTH
.
Now panel 1 has a GridLayout(1,2)
and panel 2 also has GridLayout(1,2)
.
The thing that bothers me is in panels 1 and 2 the components are aligned as though they are in GridLayout
combined.
To be specific I have a set of JTextField
components in panel 1 in position at row=0 and column=1.
I have a JTable
inside JScrollPane
at position row=0 and column=1 in panel 2.
Both these components are being rendered with the same dimension no matter what I try.
The code is too long to post here and I would appreciate if someone can clarify how to conceptually solve this problem.
public class PanelTest extends JFrame{
public static void main (String args[]) {
new PanelTest();
}
public PanelTest() {
this.setPreferredSize(new Dimension(800,200));
JPanel panel1 = new JPanel();
panel1.setLayout(new GridLayout(1,2));
JPanel panel2 = new JPanel();
panel2.setLayout(new GridLayout(1,2));
JTextField textField1 = new JTextField();
textField1.setPreferredSize(new Dimension(500, 100));
JTextField textField2 = new JTextField();
textField2.setPreferredSize(new Dimension(300, 100));
panel1.setMinimumSize(new Dimension(800, 100));
panel1.add(textField1);
panel1.add(textField2);
JTable table = new JTable();
//...
JScrollPane jps1 = new JScrollPane(table);
jps1.setPreferredSize(new Dimension(200, 300));
JTextField textField3 = new JTextField(10);
JScrollPane jps2 = new JScrollPane(textField3);
panel2.add(jps1);
panel2.add(jps2);
setLayout(new BorderLayout());
add(panel1, BorderLayout.NORTH);
add(panel2, BorderLayout.SOUTH);
this.setVisible(true);
this.pack();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
Using GridBagLayout:
public PanelTest() {
this.setPreferredSize(new Dimension(800,200));
this.setMinimumSize(new Dimension(800,200));
JPanel panel1 = new JPanel();
panel1.setLayout(new GridBagLayout());
JPanel panel2 = new JPanel();
panel2.setLayout(new GridBagLayout());
JTextField textField1 = new JTextField();
textField1.setPreferredSize(new Dimension(500, 100));
JTextField textField2 = new JTextField();
textField2.setPreferredSize(new Dimension(300, 100));
panel1.setMinimumSize(new Dimension(800, 100));
GridBagConstraints gbc = new GridBagConstraints();
// gbc.insets = new Insets(5,100,5,1);
gbc.gridx=0;
gbc.gridy=0;
panel1.add(textField1, gbc);
gbc.gridx=1;
panel1.add(textField2, gbc);
JTable table = new JTable();
//...
JScrollPane jps1 = new JScrollPane(table);
jps1.setPreferredSize(new Dimension(600, 300));
jps1.setMinimumSize(new Dimension(600, 300));
JTextField textField3 = new JTextField();
gbc = new GridBagConstraints();
// gbc.insets = new Insets(5,100,5,1);
gbc.gridx=0;
gbc.gridy=0;
panel2.add(jps1, gbc);
gbc.gridx=1;
panel2.add(textField3, gbc);
setLayout(new BorderLayout());
add(panel1, BorderLayout.NORTH);
add(panel2, BorderLayout.SOUTH);
this.setVisible(true);
this.setVisible(true);
this.pack();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}