2010-03-02 89 views
5

我目前正在使用SmartGWT並一直試圖獲得一種將gwt Standard VerticalPanel等面板包含到智能GWT窗口中的方法。究其原因,VerticalPanel是,我可以追加部件的verticalpanel對象,而無需重新設置的全部內容,例如:SmartGWT,將HTML附加到HTMLPane

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不允許我不復位的全部內容追加。

任何意見,將不勝感激,但我需要做的能夠'追加'面板。我並不特別喜歡使用垂直面板的想法,但是我需要找到一種允許上述的方法,或者允許我允許verticalpanel訪問,即選擇文本。

非常感謝

克里斯托弗。

回答

1

VerticalPanel使用html table來創建它的內容,在本例中很可能不是你想要的東西。一般來說,在HTML中,除了現有內容之外,不可能添加純HTML,因爲xml自然。例如,如果您有以下html <div>some text</div>。如果您想要添加文本,則要添加的點必須與div標記相關,因此無法在sometext之間添加某些內容,而無需重新插入整個文本。

在你的情況,你可能想使用FlowPanel(這是一個div),並與InlineHTML添加HTML(包裝了HTML與span)。如果你不想要span包裝,你將不得不重新插入文本,如你的HTMLPane例子。

+0

三江源的意見,我在問智能GWT網站上找到了解決辦法。 http://forums.smartclient.com/showthread.php?p=39351#post39351 – Christopher 2010-03-04 11:16:24

1

您需要在正確的位置設置canSelectText,而不是整個窗口(其中包括標題和圖標),但僅限於允許選擇的元素。

所以兩個選項:

1)當你添加一個簡單的GWT窗口小部件,SmartGWT的容器,它的自動包裹着WidgetCanvas。你可以自己包裝它,並在WidgetCanvas上設置CanSelectText()。

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

2)的子類帆布和重寫getInnerHTML()返回一個DIV或其他元件與已知的ID,然後使用GWT的低級別的DOM操作API來操縱它的內容。

+0

我在智能GWT網站上問過這個問題,並在那裏回答了我的確切答案。如果你是用戶'同構',謝謝你的幫助。無論如何,謝謝 – Christopher 2010-03-04 11:14:12

+0

謝謝!我可能對你在那裏的迴應有點忘恩負義,但那根本不是這個意圖。 :) – Christopher 2010-03-04 11:22:10

+0

這是一個共享帳戶,但是,那是我那個時間。 不會傷害標籤答案在這裏是正確的無論:) – 2010-03-12 16:55:31