GWT を使い始めたのですが、いくつかの問題が発生しています。SimpleLayout に Composite を読み込もうとしていますが、何も表示されません。どんな種類のエラーもスローしないので、どこを見ればよいかわかりません。
私のエントリポイントは次のようになります。
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.ui.RootPanel;
public class AppDriver implements EntryPoint{
private ExampleShell shell;
@Override
public void onModuleLoad() {
shell = new ExampleShell();
RootPanel.get().add(shell);
}
}
このクラスは問題なく動作し、次のような ExampleShell クラスをロードします。
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Button;
import com.ohapp.helloweb.client.contacts.ContactsUi;
import com.google.gwt.user.client.ui.SimplePanel;
public class ExampleShell extends Composite {
private static ExampleShellUiBinder uiBinder = GWT
.create(ExampleShellUiBinder.class);
@UiField Button btnHome;
@UiField Button btnContacts;
@UiField SimplePanel contentPanel;
interface ExampleShellUiBinder extends UiBinder<Widget, ExampleShell> {
}
public ExampleShell() {
initWidget(uiBinder.createAndBindUi(this));
btnHome.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
//TODO
}
});
btnContacts.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
try{
SimplePanel panel = ExampleShell.this.getContentPanel();
panel.clear();
ContactsUi contacts = new ContactsUi();
panel.add(contacts);
} catch (Exception ex){
System.out.println(ex.getStackTrace());
}
}
});
}
public SimplePanel getContentPanel(){
return this.contentPanel;
}
public void setContentPanel(SimplePanel contentPanel){
this.contentPanel = contentPanel;
}
}
私の ExampleShell.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>
.important {
font-weight: bold;
}
</ui:style>
<g:DockLayoutPanel>
<g:north size="100.0">
<g:FlowPanel>
<g:Image width="80px" height="80px"/>
<g:Button ui:field="btnHome">Home</g:Button>
<g:Button ui:field="btnContacts">Contacts</g:Button>
</g:FlowPanel>
</g:north>
<g:center>
<g:SimplePanel ui:field="contentPanel"/>
</g:center>
</g:DockLayoutPanel>
</ui:UiBinder>
ここまでは、すべてうまくいきます。それにもかかわらず、ボタン btnContacts が押されると、ContactsUi (Composite を拡張する) をレイアウトに追加することになっていましたが、何も表示されません。エラーも出ません。
ContactsUi クラスは次のようになります。
import com.google.gwt.core.client.GWT;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Widget;
public class ContactsUi extends Composite {
private static ContactsUiBinder uiBinder = GWT
.create(ContactsUiBinder.class);
interface ContactsUiBinder extends UiBinder<Widget, ContactsUi> {
}
public ContactsUi() {
initWidget(uiBinder.createAndBindUi(this));
}
}
ContactsUi.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>
.backGroundPanel {
background-color: #F60;
}
</ui:style>
<g:DockLayoutPanel styleName="{style.backGroundPanel}">
<g:center>
<g:FlowPanel>
<g:Label text="New Label" />
<g:Button>Contacts</g:Button>
</g:FlowPanel>
</g:center>
</g:DockLayoutPanel>
</ui:UiBinder>
私は何を間違っていますか?
よろしくお願いします。