使用GXT 2.1.1我有许多FormPanel实例,所有的默认的FormLayout布局。每个表单包含许多TextField实例,主机表单会自动为每个文本字段放置一个标签。问题是,在某些情况下,标签文本非常小,在标签和它各自的文本字段之间放置了相当大的空间。在其他情况下,标签文本太大,迫使其内容换行。我想做的是以某种方式自动调整所有标签的宽度到该表单上最宽标签的宽度
FormLayout确实有一个setLabelWidth(int pixel)函数,但它的参数必须以像素为单位。我正在考虑使用TextField.getFieldLabel()来检索标签文本,但我不知道如何将其转换为像素。
感谢您的宝贵时间!没有在表单面板中自动调整文本字段标签大小的功能。但是您可以像下面这样设置最大大小
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);
我不知道这是否真的是问题的答案,但我希望它可能对将来的人有所帮助。我真的很喜欢GWT的FlexTable在标签调整方面的表现,我正在寻找。然而,GXT将GWT的Widget实例视为WidgetComponent,当放置在FormPanel中时,它不会为嵌套的Field实例遍历而不是。所以我最后的解决方案是扩展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实例。