I couldn't find anything that would apply to my problem, neither the solution I tested worked.
So, I'm developing a UI for a course and when I resize the window there's a huge blank space that's created in between the cells, instead of the end as one would expect ( and as I want)
I color coded the panels:
So, on the burgundy panel Im using the grid bag because I want the fields and labels to be aligned as they are and this was the simplest way I found to do that. Now, as you can see on the red circle a huge space is created when the window is resized, why? Who is doing that? What panel/ config is the culprit?
Here is some of the code of the parts I believe the be involved, if you need something else let me know
//----Display Panel (green box)
public void createDisplayPanel(){
JPanel dPanel = new JPanel();
dPanel.setBorder(margins);
add(dPanel, BorderLayout.EAST);
dPanel.setLayout(new BoxLayout(dPanel, BoxLayout.Y_AXIS));
dPanel.add(createDisplayTitlePanel()); //Purple box
dPanel.add(createDisplayFieldsPanel());//Burgundy box
dPanel.add(createDisplayControlsPanel());//Orange box
}
private JPanel createDisplayFieldsPanel(){
JPanel dFieldsPanel = new JPanel();
GridBagLayout gbl_dFieldsPanel = new GridBagLayout();
gbl_dFieldsPanel.columnWidths = new int[]{0};
gbl_dFieldsPanel.rowHeights = new int[] {0};
gbl_dFieldsPanel.columnWeights = new double[]{Double.MIN_VALUE};
gbl_dFieldsPanel.rowWeights = new double[]{Double.MIN_VALUE};
dFieldsPanel.setLayout(gbl_dFieldsPanel);
createDisplayFields(dFieldsPanel); //What really create the fields
return dFieldsPanel;
}
protected void createDisplayFields(JPanel dFieldsPanel) {
Object[][] inputFieldObjs = {
{ dID, "Residential Property ID:" },
{ dFName, "Property Legal Description:" },
{ dLName, "Property Address:" },
{ dAddress, "City Quadrant:"},
{ dPCode, "Zoning of Property:"},
{ dPhone, "Property Asking Price:" },
{ dType, "Building Square Footage:",clientType },
};
int row = 0;
for (Object[] obj : inputFieldObjs){
GridBagConstraints gbc_Label = createLabelGBConstrain(row,0);
GridBagConstraints gbc_InputField = createInputFieldGBConstrain(row,1);
dFieldsPanel.add(createLabel(obj),gbc_Label);
if(obj.length == 2)
dFieldsPanel.add(createTextField(obj),gbc_InputField);
else
dFieldsPanel.add(createComboBox(obj),gbc_InputField);
row ++;
}
private JLabel createLabel (Object[] objs){
String labelText = (String) objs[1];
JLabel label = new JLabel(labelText);
label.setFont(text);
return label;
}
private JTextField createTextField(Object[] objs){
JTextField field = (JTextField) objs[0];
field = new JTextField();
field.setFont(text);
field.setColumns(10);
return field;
}
private JComboBox createComboBox(Object[] objs){
JComboBox field = (JComboBox) objs[0];
String[] options = (String[]) objs[2];
field = new JComboBox(options);
field.setFont(text);
return field;
}
private GridBagConstraints createLabelGBConstrain(int row, int col){
GridBagConstraints gbc_Label = new GridBagConstraints();
gbc_Label.anchor = GridBagConstraints.EAST;
gbc_Label.insets = new Insets(0, 0, 5, 5);
gbc_Label.gridx = col;
gbc_Label.gridy = row;
return gbc_Label;
}
private GridBagConstraints createInputFieldGBConstrain(int row, int col){
GridBagConstraints gbc_InputField = new GridBagConstraints();
gbc_InputField.anchor = GridBagConstraints.WEST;
gbc_InputField.insets = new Insets(0, 0, 5, 0);
gbc_InputField.gridx = 1;
gbc_InputField.gridy = row;
return gbc_InputField;
}
Solution I tested: Set the the weightx and weighty to 0 and the fill to none on the fields/labels... didn't work and I was only able to find this solution that was remotely related to my case
Thank you for any help =)
Edit: Thank you for the answer guys, I the problem really was solved by camickr's solution. I really had no idea what that piece of code was doing. it was auto generated. Also thanks for the tips on comment on how to post a better question, I will sure keep that in mind next time =)
The first thing I did was comment out the following:
/*
gbl_dFieldsPanel.columnWidths = new int[]{0};
gbl_dFieldsPanel.rowHeights = new int[] {0};
gbl_dFieldsPanel.columnWeights = new double[]{Double.MIN_VALUE};
gbl_dFieldsPanel.rowWeights = new double[]{Double.MIN_VALUE};
*/
This gets all the components displayed together vertically.