2010-03-02 3 views
5

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

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

Любой совет будет оценен, однако мне нужно сделать «добавление» к панели. Мне не очень нравится идея использования вертикальной панели, однако мне нужно либо найти способ разрешения вышеупомянутого, либо позволить мне разрешить доступ к вертикальной панели, т. Е. Выбирать текст.

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

Christopher.

ответ

1

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

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

+0

Thankyou за советы, я нашел решение на спрашивая на смарт-сайте GWT. http://forums.smartclient.com/showthread.php?p=39351#post39351 – Christopher

1

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

Так два варианта:

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

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

2) подклассом Холст и переопределить getInnerHTML(), чтобы возвратить DIV или другой элемент с известным ID, а затем использовать DOM манипуляции с низким уровнем API, GWT, чтобы манипулировать его содержание.

+0

Я задал этот вопрос на веб-сайте Smart GWT, и мне ответили на него с точным ответом. Если вы являетесь пользователем изоморфным, спасибо за помощь. – Christopher

+0

Спасибо, в любом случае! Возможно, я немного посмел ответить на ваш ответ, но это было совсем не намерение. :) – Christopher

+0

Это общая учетная запись, но да, это был я тот раз. Не помешало бы обозначить ответ здесь как правильный независимо :) –