5

我目前正在使用 SmartGWT,并且一直在尝试获得一种将诸如 gwt Standard VerticalPanel 之类的面板包含到智能 GWT 窗口中的方法。VerticalPanel 的原因是我可以将小部件附加到verticalpanel 对象而无需重新设置整个内容,例如:

HTMLPane hPaneObj = new HTMLPane();  
hPaneObj.setContents("Foo");

现在追加我只能看到我可以做到:

hPaneObj.setContents(hPaneObj.getContents() + "Bar");

这不是我需要的。

添加 VerticalPanel 后出现问题,即使使用以 true 作为参数调用的 'setCanSelectText' 方法,我也无法选择窗口内的任何文本。下面是我整理的一个简短示例:

 public void onModuleLoad() {
  Window theWindow = new Window();
  theWindow.setTitle("Good evening");
  theWindow.setWidth(500);
  theWindow.setHeight(500);
  theWindow.setCanSelectText(true);

  VerticalPanel vp = new VerticalPanel();
  vp.add(new HTML("foo"));
  vp.add(new HTML("bar"));
  theWindow.addItem(vp);
  Canvas canvas = new Canvas();
  canvas.addChild(theWindow);
  canvas.draw();
 }

然而,我很惊讶 HTMLPane 不允许我在不重置整个内容的情况下追加。

任何建议将不胜感激,但我需要能够“附加”到面板。我不是特别喜欢使用垂直面板的想法,但是我需要找到一种方法来允许上述内容或允许我允许垂直面板可访问,即选择文本。

非常感谢

克里斯托弗。

4

3 回答 3

1

使用VerticalPanelhtmltable来创建它的内容,在这种情况下很可能不是你想要的。通常,在 HTML 中,除了现有内容之外,不可能添加纯 HTML,因为它具有类似 xml 的性质。例如,如果您有以下 html <div>some text</div>。如果要添加文本,则要添加的点必须与div标签相关,例如,在不重新插入整个文本的情况下添加内容是不可能sometext

在您的情况下,您可能希望使用FlowPanel(它是 a div)并添加 HTML InlineHTML(它用 a 包装 HTML span)。如果您不想要span包装,则必须像HTMLPane示例中那样重新插入文本。

于 2010-03-02T13:54:14.217 回答
1

您需要在正确的位置设置 canSelectText,而不是在整个窗口上(包括标题和图标),而只是在允许选择的元素上。

所以有两个选择:

1) 当您将一个普通的 GWT 小部件添加到 SmartGWT 容器时,它会使用 WidgetCanvas 自动包装。您可以自己包装它并在 WidgetCanvas 上设置 CanSelectText()。

http://www.smartclient.com/smartgwtee/javadoc/com/smartgwt/client/widgets/WidgetCanvas.html

2) 继承 Canvas 并覆盖 getInnerHTML() 以返回一个 DIV 或其他具有已知 ID 的元素,然后使用 GWT 的低级 DOM 操作 API 来操作它的内容。

于 2010-03-02T15:00:39.543 回答
0

问题已通过同构解决:

http://forums.smartclient.com/showthread.php?p=39351#post39351

于 2010-03-04T11:16:53.967 回答