带有可滚动内容的GXT MessageBox

时间:2015-06-03 10:53:40

标签: html css gwt gxt

我必须使用GXT AlertMessageBox显示堆栈跟踪,并且我希望有一个固定大小的框,其内容可滚动(至少垂直)。 不幸的是,我无法做到这一点。

到目前为止我所做的是以下内容:

  • 使用@XTemplate这样的

    @XTemplate(value = "<pre>{stacktrace}</pre>")
    SafeHtml render(String stacktrace);
    

    渲染堆栈跟踪。此处需要<pre>来保留堆栈跟踪格式。

  • 使用GXT AlertMessageBox呈现如下模板:

    MessageBox box = new AlertMessageBox("", "");
    box.setMessage(StacktraceTemplate.RENDERER.render(stackTrace).asString());
    box.setHeadingText("Stacktrace");
    box.setResize(false);
    box.setHeight(700);
    box.show();
    

在我看来,我可以:

  • 让容器根据内容的大小自行调整大小(如果我允许box.setResize(true),这是默认值)
  • 让容器将堆栈跟踪截断为box.setHeight()
  • 指定的大小

我已经尝试了以下内容:

  • 让模板声明overflow: scroll;(即@XTemplate(value = "<pre style='overflow: scroll;'>{stacktrace}</pre>") @XTemplate(value = "<div style='overflow: scroll;'><pre>{stacktrace}</pre></div>"))。结果是我看到一个禁用的滚动条,和 内容仍然被截断。
  • SafeHtml的{​​{1}}包裹在XTemplate中,然后将其添加到HTML。然后我添加了scrollpanel 方框的消息是这样的:

    ScrollPanel

    但结果相同(即禁用滚动条)。

  • 使用ScrollPanel container = new ScrollPanel(content); container.setAlwaysShowScrollBars(true); HTMLPanel panel = new HTMLPanel(""); panel.add(container.asWidget()); MessageBox box = new MessageBox(SafeHtmlUtils.fromSafeConstant("<div>StackTrace</div>"),SafeHtmlUtils.fromTrustedString(panel.getElement().getInnerHTML())); // same setResize, setHeight, show as before 包裹FlowLayoutContainer。结果相同。

如何使用可滚动内容来固定大小getScrollSupport().setScrollMode(ScrollSupport.ScrollMode.ALWAYS);

1 个答案:

答案 0 :(得分:0)

事实证明,我非常接近解决方案:我的想法是让MessageBox根据内容调整其大小,然后像这样修复ScrollPanel的大小:< / p>

HTML content = new HTML(StacktraceTemplate.RENDERER.render(stackTrace));
ScrollPanel container = new ScrollPanel(content);
container.setHeight("700px");
HTMLPanel panel = new HTMLPanel("");
panel.add(container.asWidget());
MessageBox box = new AlertMessageBox(
    SafeHtmlUtils.fromSafeConstant("<div>StackTrace</div>").asString(),
    SafeHtmlUtils.fromTrustedString(panel.getElement().getInnerHTML()).asString());
box.show();