GWT - 你可以在FormPanels中嵌套FormPanels吗?

时间:2012-02-06 18:18:21

标签: gwt gxt formpanel

我正在尝试将FormPanel嵌套在另一个FormPanel中。似乎嵌套面板中的任何字段都不会呈现。

此屏幕截图由下面的代码生成:

enter image description here

TabItem tabItem = new TabItem("Tab Item");

FormPanel formPanel = new FormPanel();
formPanel.setHeading("Form Panel");
formPanel.setFrame(true);

TextField textField = new TextField();
textField.setFieldLabel("Text Field");

FormPanel nestedPanel = new FormPanel();
nestedPanel.setHeading("Nested Panel");

TextField nestedField = new TextField();
nestedField.setFieldLabel("Nested Field");

nestedPanel.add(nestedField);

TextField anotherField = new TextField();
anotherField.setFieldLabel("Another Field");

formPanel.add(textField);
formPanel.add(nestedPanel);
formPanel.add(anotherField);

tabItem.add(formPanel);
tabPanel.add(tabItem);

任何人都可以解释为什么嵌套字段不会在嵌套面板中显示?

我也尝试使用CaptionPanel而不是FormPanel作为嵌套面板,但标题面板不显示字段标签。

我们非常欢迎任何关于如何让它发挥作用的建议。谢谢:))

1 个答案:

答案 0 :(得分:3)

正如Jason所说,<form>不能嵌套。 GXT FormPanel绘制表单作为其工作方式的一部分,因此请考虑以另一种方式绘制此布局。

要模拟FormPanel的外观,有两个基本步骤。

  • 要获取标题,边框,请创建ContentPanel,然后将内容添加到该
  • 要获取绘制字段标签的GXT 2布局,请在内容面板中使用FormLayout

这看起来像这样(来自你的例子)

//...
ContentPanel nestedPanel = new ContentPanel(new FormLayout();
nestedPanel.setHeading("Nested Panel");

TextField nestedField = new TextField();
nestedField.setFieldLabel("Nested Field");

nestedPanel.add(nestedField);
//...

外部字段仍将管理任何绑定,嵌套字段看起来就像它们在FormPanel中一样。如果不使用FormPanel的其他功能,使用ContentPanel(或LayoutContainer,如果你不想要border / header)和FormLayout一般更有意义。