具有可滚动内容的 GXT MessageBox
GXT MessageBox with scrollable content
我必须使用 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>")
)。结果是我看到一个禁用的滚动条,并且
内容仍然被截断。
将 XTemplate
产生的 SafeHtml
包装在 HTML
中,然后将其添加到 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
但结果是一样的(即禁用滚动条)。
- 用
getScrollSupport().setScrollMode(ScrollSupport.ScrollMode.ALWAYS);
包裹在 FlowLayoutContainer
中。相同的结果。
我应该怎么做才能拥有固定大小 MessageBox
和可滚动的内容?
事实证明我非常接近解决方案:想法是让 MessageBox
调整其大小以适应内容,然后像这样固定 ScrollPanel
的大小:
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();
我必须使用 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>")
)。结果是我看到一个禁用的滚动条,并且 内容仍然被截断。 将
XTemplate
产生的SafeHtml
包装在HTML
中,然后将其添加到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
但结果是一样的(即禁用滚动条)。
- 用
getScrollSupport().setScrollMode(ScrollSupport.ScrollMode.ALWAYS);
包裹在FlowLayoutContainer
中。相同的结果。
我应该怎么做才能拥有固定大小 MessageBox
和可滚动的内容?
事实证明我非常接近解决方案:想法是让 MessageBox
调整其大小以适应内容,然后像这样固定 ScrollPanel
的大小:
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();