gpt4 book ai didi

java - 无法在 SimpleLayout 中加载 Composite

转载 作者:行者123 更新时间:2023-12-02 06:54:07 25 4
gpt4 key购买 nike

我开始使用 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>

我做错了什么?

致以诚挚的问候。

最佳答案

实现 RequiresResize 的小部件必须放入实现 ProvidesResize 的小部件中,或者指定明确的大小(最好以像素为单位)。

就您而言,由于复合的根小部件DockLayoutPanel,因此您应该使用ResizeComposite而不是Composite ,以及 RootLayoutPanel 而不是 RootPanel

参见https://code.google.com/p/google-web-toolkit/issues/detail?id=5874以及“在没有 RootLayoutPanel 的情况下使用 LayoutPanel”食谱 http://www.gwtproject.org/doc/latest/DevGuideUiPanels.html#Recipes (您也可以在此页面中阅读有关 RequiresResizeProvidesResize 的更多信息)

关于java - 无法在 SimpleLayout 中加载 Composite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17621387/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com