2010-03-02 14 views
5

Attualmente sto lavorando con SmartGWT e sto cercando di ottenere un modo di includere un pannello come gwt Standard VerticalPanel in una finestra GWT intelligente. La ragione per la VerticalPanel è che posso aggiungere widget all'oggetto verticalpanel senza dover re-impostare l'intero contenuto, ad esempio:SmartGWT, accodamento HTML a HTMLPane

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

Ora per aggiungere posso solo vedere che posso fare:

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

che non è quello che mi serve.

Il problema sorge dopo aver aggiunto il VerticalPanel, non posso selezionare alcun testo all'interno della finestra anche con il metodo "setCanSelectText" chiamato true come parametro. Di seguito è riportato un breve esempio che ho messo insieme:

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(); 
} 

Sto abbastanza sorpreso, tuttavia, che HTMLPane non mi permette di aggiungere senza ripristinare l'intero contenuto.

Qualsiasi consiglio sarebbe apprezzato tuttavia, devo essere in grado di "aggiungere" a un pannello. Non mi piace particolarmente l'idea di usare un pannello verticale, ma ho bisogno di trovare un metodo per consentire il suddetto o di consentire che il pannello verticale sia accessibile, ovvero selezionare il testo.

Molte grazie

Christopher.

risposta

1

Il VerticalPanel utilizza un codice HTML table per creare il suo contenuto e molto probabilmente non è qualcosa che si desidera in questo caso. In generale, in HTML non è possibile aggiungere un semplice HTML oltre al contenuto esistente, a causa della natura simile a xml. Ad esempio se hai il seguente codice HTML <div>some text</div>. Se si desidera aggiungere del testo, il punto da aggiungere deve essere relativo al tag div, non è possibile aggiungere qualcosa ad esempio tra some e text senza reinserire l'intero testo.

Nel tuo caso si potrebbe desiderare di utilizzare FlowPanel (che è un div) e aggiungere il HTML con InlineHTML (che avvolge il codice HTML con un span). Nel caso in cui non si desideri che lo span venga spostato, è necessario reinserire il testo come nell'esempio HTMLPane.

+0

Grazie per i consigli, ho trovato la soluzione quando abbiamo chiesto sul sito web intelligente GWT. http://forums.smartclient.com/showthread.php?p=39351#post39351 – Christopher

1

È necessario impostare canSelectText nel posto giusto, non nell'intera finestra (che include l'intestazione e le icone), ma solo sull'elemento in cui è consentita la selezione.

Così due opzioni:

1) quando si aggiunge un widget semplice GWT ad un contenitore SmartGWT E 'auto-avvolto con un WidgetCanvas. Puoi metterlo da solo e setCanSelectText() su WidgetCanvas.

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

2) tela sottoclasse e sovrascrivere getInnerHTML() per restituire un DIV o altro elemento con un ID nota, e quindi utilizzare API di basso livello di manipolazione DOM di GWT di manipolare il suo contenuto.

+0

Ho fatto questa domanda sul sito Web di Smart GWT e mi è stata data risposta con la risposta esatta. Se sei l'utente 'isomorfo', grazie per l'assistenza. – Christopher

+0

Grazie comunque! Potrei sembrare un po 'ingrato alla tua risposta, ma questa non era affatto l'intenzione. :) – Christopher

+0

Questo è un account condiviso, ma sì, ero io quella volta. Non sarebbe male etichettare la risposta qui come corretta indipendentemente :) –