SmartGWT, добавление HTML в HTMLPane - PullRequest
5 голосов
/ 02 марта 2010

В настоящее время я работаю со SmartGWT и пытаюсь найти способ включения панели, такой как gwt Standard VerticalPanel, в окно Smart GWT. Причина для VerticalPanel заключается в том, что я могу добавлять виджеты к объекту вертикальной панели без необходимости переустанавливать весь контент, например:

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

Теперь, чтобы добавить, я вижу только то, что я могу сделать:

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

это не то, что мне нужно.

Проблема возникает после того, как я добавил VerticalPanel, я не могу выделить какой-либо текст в окне даже с помощью метода setCanSelectText, вызванного с true в качестве параметра. Ниже приведен краткий пример, который я собрал:

 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 не позволяет мне добавлять без сброса всего содержимого.

Буду признателен за любой совет, однако мне нужно иметь возможность «добавить» в панель. Мне не особенно нравится идея использования вертикальной панели, однако мне нужно либо найти способ, позволяющий вышеупомянутому или позволяющий мне сделать доступным вертикальную панель, то есть выделение текста.

Большое спасибо

Кристофер.

Ответы [ 3 ]

1 голос
/ 02 марта 2010

Вам нужно установить canSelectText в нужном месте, а не в окне в целом (которое включает заголовок и значки), а только в элементе, где выбор возможен.

Итак, два варианта:

1) когда вы добавляете простой GWT-виджет в контейнер SmartGWT, он автоматически переносится с помощью WidgetCanvas. Вы можете обернуть это самостоятельно и установитьCanSelectText () на WidgetCanvas.

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

2) подкласс Canvas и переопределение getInnerHTML () для возврата DIV или другого элемента с известным идентификатором, а затем использование низкоуровневых API-интерфейсов манипуляции DOM для управления его содержимым.

1 голос
/ 02 марта 2010

VerticalPanel использует HTML table для создания своего контента, и, скорее всего, в данном случае это не то, что вам нужно. В целом, в HTML невозможно добавить простой HTML в дополнение к существующему контенту из-за природы, подобной xml. Например, если у вас есть следующий HTML <div>some text</div>. Если вы хотите добавить текст, точка для добавления должна относиться к тегу div, невозможно добавить что-то, например, между some и text без повторной вставки всего текста.

В вашем случае вы можете использовать FlowPanel (который является div) и добавить HTML с InlineHTML (который оборачивает HTML с span). Если вы не хотите, чтобы span был перенесен, вам придется заново вставить текст, как в вашем примере HTMLPane.

0 голосов
/ 04 марта 2010

Проблема решена изоморфно по:

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

...