GWT - Можете ли вы вкладывать FormPanels внутри FormPanels? - PullRequest
2 голосов
/ 06 февраля 2012

Я пытаюсь вложить 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 Ответ

3 голосов
/ 07 февраля 2012

Как упоминал Джейсон, <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, если вам не нужны граница / заголовок) с FormLayout.

...