在GXT中的FormPanel中自动调整TextField标签

时间:2013-03-08 07:33:00

标签: gxt autosize formpanel

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

FormLayout确实有 setLabelWidth (int pixel)函数,但其​​参数必须以像素为单位。我正在考虑使用TextField.getFieldLabel()来检索标签文本,但我不知道如何将其转换为像素。

谢谢你的时间!

2 个答案:

答案 0 :(得分:0)

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

 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);

答案 1 :(得分:0)

不知道这是否真的是问题的答案,但我希望它可能有助于未来的人。 我真的很喜欢GWT的FlexTable在我正在寻找的标签调整大小方面的表现。但是,GXT将GWT的Widget实例视为WidgetComponent,当置于FormPanel中时,它会对嵌套的Field实例遍历 not 。所以我的最终解决方案是扩展GXT的FormPanel并覆盖其getFields()和getChildFields()函数,后者的逻辑除了容器实例之外还要查找WidgetComponent实例:

  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实例。