ОК, все заработало (см. Предыдущие версии этого ответа для предыдущих попыток;)).
Мое решение основано на Пример почты .
Рабочий код:
public class SplitTest implements EntryPoint {
private static TestUiBinder uiBinder = GWT.create(TestUiBinder.class);
interface TestUiBinder extends UiBinder<SplitLayoutPanel, SplitTest> {
}
/**
* This is the entry point method.
*/
public void onModuleLoad() {
SplitLayoutPanel outer = uiBinder.createAndBindUi(this);
RootLayoutPanel.get().add(outer);
}
}
UiBinder * .ui.xml:
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui">
<ui:style>
.conversationPanelContainer, .conversationPanel, .messageTextAndSendPanel, .messageText {
font-weight: bold;
}
</ui:style>
<g:SplitLayoutPanel>
<g:north size="700">
<g:VerticalPanel>
<g:ScrollPanel styleName="{style.conversationPanelContainer}">
<g:FlexTable ui:field="conversationPanel" styleName="{style.conversationPanel}"></g:FlexTable>
</g:ScrollPanel>
<g:HorizontalPanel styleName="{style.messageTextAndSendPanel}">
<g:TextBox ui:field="messageText" styleName="{style.messageText}"></g:TextBox><g:Button ui:field="sendButton">Send</g:Button>
</g:HorizontalPanel>
</g:VerticalPanel>
</g:north>
<g:south size="300">
<g:Button>TestButton</g:Button>
</g:south>
</g:SplitLayoutPanel>
</ui:UiBinder>
Обратите внимание на несколько вещей:
- Прежде всего: у вас была ошибка в XML-шаблоне UiBinder: это
<g:Button>
, а не <g:button>
(чувствительно к регистру)
- Использование
RootLayoutPanel
вместо обычного RootPanel
- Я все еще немного озадачен всей этой штукой
LayoutPanel
- в примере Mail они используют SplitLayoutPanel
, вложенные в DockLayoutPanel
, но только DockLayoutPanel
явно добавлен к RootLayoutPanel
- должен ли я понимать, что SplitLayoutPanel
автоматически добавляется (чтобы он мог получать события изменения размера и т. д.)? Как насчет некоторых других виджетов, вложенных в основную панель LayoutPanel - их нужно явно добавлять в RootLayoutPanel
или только если они являются корнем этого виджета / составного элемента или это даже невозможно? У меня действительно нет времени, чтобы заниматься этим дальше - я оставлю это как домашнее задание для кого-то другого;)
Кстати: я проверил этот код в режимах Quirks и Standards - я не вижу разницы, оба работают O_o (хотя это простое использование SplitLayoutPanel
- более сложные примеры, вероятно, приведут к странное поведение в режиме Quirks и / или ошибки рендеринга)