代码之家  ›  专栏  ›  技术社区  ›  user1056027

自动调整GXT中FormPanel中的TextField标签的大小

  •  0
  • user1056027  · 技术社区  · 11 年前

    使用GXT 2.1.1 我有很多FormPanel实例,都使用默认的FormLayout布局。每个表单都包含多个TextField实例,宿主表单会自动为每个文本字段放置一个标签。问题是,在某些情况下,标签文本非常小,在标签和相应的文本字段之间放置了相当大的空间。在其他情况下,标签文本太大,迫使其内容换行。 我想做的是以某种方式将所有标签自动调整为该表单上最宽标签的宽度。

    FormLayout没有 设置标签宽度 (int pixel)函数,但其参数必须以像素为单位。我想使用TextField.getFieldLabel()来检索标签文本,但我不知道如何将其转换为像素。

    谢谢你抽出时间!

    2 回复  |  直到 11 年前
        1
  •  0
  •   Divyesh Rupawala    11 年前

    表单面板中没有自动调整文本字段标签大小的功能。但您可以按如下方式设置最大大小

     FormPanel formPanel = new FormPanel();  
     formPanel.setBodyBorder(false);
     formPanel.setButtonAlign(HorizontalAlignment.CENTER);
    
        FormLayout layout = new FormLayout();  
        layout.setLabelAlign(LabelAlign.LEFT);
        layout.setLabelWidth(200);//Here you can set maximum size of your label
        formPanel.setLayout(layout);
    
        2
  •  0
  •   user1056027    11 年前

    不知道这是否真的是这个问题的答案,但我希望这可能会对未来的人有所帮助。 我真的很喜欢GWT的FlexTable在我想要的标签调整方面的表现。然而,GXT将GWT的Widget实例视为WidgetComponent,这样做 当放置在FormPanel中时,为嵌套的Field实例遍历。因此,我的最终解决方案是扩展GXT的FormPanel并覆盖其getFields()和getChildFields(

      for (Component comp : c.getItems()) {
        if (comp instanceof Field) {
          fields.add((Field<?>) comp);
        }
        else if (comp instanceof WidgetComponent) {
           if (((WidgetComponent) comp).getWidget() instanceof FlexTable) {
    
                 // logic to retrieve Field instances from FlexTable
    
           }
        }
        else if (comp instanceof Container) {
          getChildFields((Container<Component>) comp, fields);
        }
      }
    

    为了补充这个逻辑,我还必须扩展FlexTable以允许设置和检索Field实例。