2010-03-02 10 views
5

Actualmente estoy trabajando con SmartGWT y he estado tratando de obtener una forma de incluir un panel como el estándar VerticalPanel de gwt en una ventana inteligente de GWT. La razón de la VerticalPanel es que puedo añadir widgets en el objeto VerticalPanel sin tener que volver a ajustar la totalidad del contenido, por ejemplo:SmartGWT, anexando HTML a HTMLPane

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

Ahora anexar sólo puedo ver que puedo hacer:

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

que no es lo que necesito.

El problema surge después de haber agregado VerticalPanel, no puedo seleccionar ningún texto dentro de la ventana incluso con el método 'setCanSelectText' llamado con true como parámetro. A continuación se muestra un ejemplo corto que arme:

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

estoy bastante sorprendido sin embargo, que htmlPane no me permite anexar sin restablecer todo el contenido.

Cualquier consejo sería apreciado, sin embargo, debo ser capaz de 'agregar' a un panel. No me gusta particularmente la idea de usar un panel vertical, sin embargo, necesito encontrar un método para permitir lo anterior o permitirme permitir que el panel vertical sea accesible, es decir, seleccionar el texto.

Muchas gracias

Christopher.

Respuesta

1

El VerticalPanel utiliza un html table para crear su contenido, y lo más probable es que no sea algo que desee en este caso. En general, en HTML no es posible agregar HTML sencillo además del contenido existente, debido a la naturaleza de tipo xml. Por ejemplo, si tiene el siguiente html <div>some text</div>. Si desea agregar texto, el punto que debe agregarse debe estar relacionado con la etiqueta div, no es posible agregar algo, por ejemplo, entre some y text sin reinsertar ese texto completo.

En su caso es posible que desee utilizar FlowPanel (que es un div) y añadir el código HTML con InlineHTML (que envuelve el código HTML con un span). En caso de que no desee el span envuelto, deberá volver a insertar el texto como en su ejemplo HTMLPane.

+0

Gracias por el consejo, he encontrado la solución al preguntar en el sitio web inteligente GWT. http://forums.smartclient.com/showthread.php?p=39351#post39351 – Christopher

1

Debe establecer canSelectText en el lugar correcto, no en la ventana como un todo (que incluiría el encabezado y los iconos), sino solo en el elemento donde se permite la selección.

Así que dos opciones:

1) cuando se agrega un widget sencillo GWT a un contenedor SmartGWT Está envuelto-auto con un WidgetCanvas. Puede envolverlo usted mismo y setCanSelectText() en el WidgetCanvas.

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

2) de la lona subclase y anular getInnerHTML() para devolver un DIV u otro elemento con un ID conocido, y luego utilizar las API de manipulación de DOM de bajo nivel de GWT para manipular su contenido.

+0

Hice esta pregunta en el sitio web de Smart GWT y fue respondida allí con la respuesta exacta. Si eres el usuario "isomorfo", gracias por la ayuda. – Christopher

+0

¡Gracias de todos modos! Puede que haya sonado un poco desagradecido con tu respuesta allí, pero esa no era la intención en absoluto. :) – Christopher

+0

Esa es una cuenta compartida, pero sí, fui yo esa vez. No estaría de más etiquetar la respuesta aquí como correcta independientemente :) –

Cuestiones relacionadas