2017-02-27 108 views
-1

我找不到适用于我的问题的任何内容,我测试的解决方案都无法正常工作。调整大小时避免单元格之间出现空白

所以,我发展为一疗程UI,当我调整窗口的大小有一个创建在细胞之间存在巨大的空白,而不是如人们所期望的结束(和我想)

我颜色编码的面板:

  • 蓝 - 主面板,边界布局
  • 绿色 - 其中显示信息,框布局Y轴
  • 面板
  • 紫色 - 与标题,框布局X轴的面板(无关联的,如果需要的话 可以改变)
  • 橙色 - 该面板的控制,框布局X轴(不依赖于该 ,可以改变如果需要的话,只要按钮留在象 流布局线)
  • 勃艮第 - 与区域显示面板/

所以改变 信息,所述一个与所述问题,网格包布局,上勃艮第面板Im使用网格袋,因为我希望字段和标签按照原样和标准对齐这是我发现的最简单的方法。现在,正如您在红色圆圈上看到的那样,窗口大小调整时会创建一个巨大的空间,为什么?谁在做这件事?什么面板/配置是罪魁祸首?

下面是一些我相信参与,如果你需要别的部分的代码让我知道

//----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; 
    } 

解决方案我测试: 设置的的weightx和份量为0,填充到无的字段/标签......没有工作,我只能找到这个解决方案,被远程有关我的情况

感谢您的帮助=)

编辑:谢谢你的答案,我的问题真的解决了camickr的解决方案。我真的不知道那段代码在做什么。它是自动生成的。此外,感谢您提供关于如何发布更好问题的提示,下次我将确保记住这一点=)

+1

考虑将代码和问题简化为[mcve] - 编译,运行并向我们显示您的问题的最小程序。这不仅仅是一个片段,也远不及你的整个项目。请阅读链接了解详情。 –

+1

如果您想在底部留出空白处,请考虑将包含JLabel/JTextFields的使用GridBagLayout的JPanel放入另一个BorderLayout中 - 在BorderLayout.PAGE_START位置使用JPanel,然后将该JPanel放入GUI中。 –

回答

1

我做的第一件事是注释掉如下:

/* 
    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}; 
*/ 

这得到所有组件一起显示垂直。

0

您必须为要包含额外空间的任何字段设置weightx和weighty约束。您还需要确保您为该字段设置了定位点。

确保其余字段的weightx和weighty设置为零。我通常在开始时将它们设置为零,并且只在添加最后一个字段时才转换为1。

相关问题