我尝试在GWT中创建一个有标题的边框框架,结果如下:
这可以使用HTML字段集和图例标签来完成,例如
<fieldset>
<legend>Connection parameters</legend>
... the rest ...
</fieldset>
我想在GWT中创建一个自定义小部件来实现这一点。我设法做到了这一点,但问题是,尽管我添加了处理程序,但小部件中发生的事件(按钮单击等)并未触发。
我的小部件实现如下所示:
public class TitledPanel extends Widget {
private Element legend;
private Widget content = null;
public TitledPanel() {
Element fieldset = DOM.createFieldSet();
legend = DOM.createLegend();
DOM.appendChild(fieldset, legend);
setElement(fieldset);
}
public TitledPanel(String title) {
this();
setTitle(title);
}
@Override
public String getTitle() {
return DOM.getInnerHTML(legend);
}
@Override
public void setTitle(String html) {
DOM.setInnerHTML(legend, html);
}
public Widget getContent() {
return content;
}
public void setContent(Widget content) {
if (this.content != null) {
DOM.removeChild(getElement(), this.content.getElement());
}
this.content = content;
DOM.appendChild(getElement(), content.getElement());
}
}
我是否需要扩展组合,或者需要手动重新路由事件,或者是否有其他方法?
发布于 2009-10-06 10:34:28
我想你是在找CaptionPanel
在边框中包装其内容的面板,边框的左上角显示有标题。这是fieldset HTML元素的实现。
发布于 2009-10-06 12:04:12
我认为这里的问题是您只调用DOM.appendChild
-这不会导致TitledPanel
采用Widget
。通常的做法是扩展Composite
,然后调用initWidget(Widget widget)
-在内部它调用widget.setParent(this);
,这反过来会使父级采用这个小部件并将其附加到浏览器的文档中。但是,com.google.gwt.user.client.ui.Widget.setParent(Widget)只是包可见的,所以您不能在代码中调用它(例如,在DOM.appendChild
之后)。
我推荐阅读Widget Best Practices / Widget Building,特别是GWT yourself和/或查看一些小部件的源代码,以了解如何看待自定义小部件的创建。
而且,正如Robert suggested所说,CaptionPanel是更安全的途径:)
https://stackoverflow.com/questions/1523997
复制相似问题