0

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

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

感谢您的时间!

4

2 回答 2

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);
于 2013-03-08T08:29:42.403 回答
0

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

于 2013-03-12T19:47:43.477 回答