首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带标题的GWT框架面板(使用FIELDSET和图例html标记)

带标题的GWT框架面板(使用FIELDSET和图例html标记)
EN

Stack Overflow用户
提问于 2009-10-06 06:57:29
回答 2查看 9.6K关注 0票数 6

我尝试在GWT中创建一个有标题的边框框架,结果如下:

这可以使用HTML字段集和图例标签来完成,例如

代码语言:javascript
运行
复制
<fieldset> 
    <legend>Connection parameters</legend>
    ... the rest ...
</fieldset>

我想在GWT中创建一个自定义小部件来实现这一点。我设法做到了这一点,但问题是,尽管我添加了处理程序,但小部件中发生的事件(按钮单击等)并未触发。

我的小部件实现如下所示:

代码语言:javascript
运行
复制
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());
}
}

我是否需要扩展组合,或者需要手动重新路由事件,或者是否有其他方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-10-06 10:34:28

我想你是在找CaptionPanel

在边框中包装其内容的面板,边框的左上角显示有标题。这是fieldset HTML元素的实现。

票数 17
EN

Stack Overflow用户

发布于 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是更安全的途径:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1523997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档