[Gvsig_desarrolladores] <label-set>

Juan Guillermo Jordán Aldasoro jjordan en robotica.uv.es
Vie Jul 4 14:13:44 CEST 2008


Gracias por tu respuesta César. Al final lo hemos resuelto usando 
setLabelSet de la clase NewStatusLabel y pasándole como parámetro una 
estructura Label[] con las nuevas etiquetas a añadir. Estas etiquetas se 
siguen pudiendo escribir con:

PluginServices.getMainFrame().getStatusBar().setMessage(nombre,valor);

Sin embargo también queremos añadir un par de iconos a la barra de 
estado, con lo que tendremos que añadir JLabel. Estamos probando con el 
método

PluginServices.getMainFrame().getStatusBar().addControl(id,Component)

que permite añadir cualquier componente que extienda de Component.

Sería interesante que en un futuro la barra de estado tuviera algún 
método para poder añadir iconos, algo como setIcon.

Perdona si he confundido el nombre de algún método porque los he escrito 
de memoria.

Saludos
Juangui

César Martínez Izquierdo escribió:
> Juan Guillermo Jordán Aldasoro escribió:
>> Buenas
>>
>> Estamos realizando una extensión para gvSIG y queremos escribir en la 
>> barra de estado. Hemos leído en la documentación que existe un tag en 
>> el fichero config.xml llamado <label-set> para este mismo propósito.
>>
>> Hemos buscado en el workspace extensiones que hagan uso de esta 
>> etiqueta, y sólo la hemos encontrado el config.xml de appgvSIG. Este 
>> es un extracto del config.xml:
>>
>>     <label-set 
>> class-name="com.iver.cit.gvsig.project.documents.view.gui.View">
>>         <label id="units" size="85"/>
>>         <label id="x" size="126"/>
>>         <label id="y" size="126"/>
>>         <label id="4" size="110"/>
>>         <label id="5" size="140"/>
>>         <label id="projection" size="85"/>
>>     </label-set>
>>     <label-set class-name="com.iver.cit.gvsig.gui.layout.Layout">
>>         <label id="units" size="80"/>
>>         <label id="2" size="180"/>
>>         <label id="3" size="180"/>
>>         <label id="4" size="50"/>
>>         <label id="5" size="50"/>
>>     </label-set>
>>
>>
>> Según la documentación, las etiquetas sólo son visibles cuando la 
>> vista activa es instancia del nombre de la clase declarada en el 
>> atributo class-name de label-set. Según esto, para que nuestras 
>> etiquetas fueran visibles al trabajar con una vista, yo interpreto 
>> que habría que poner como class-name la clase View o la clase Layout 
>> también. Es decir, en el config.xml de nuestra extensión aparecería:
>>
>>     <label-set 
>> class-name="com.iver.cit.gvsig.project.documents.view.gui.View">
>>         <label id="gpsx" size="126"/>
>>         <label id="gpsy" size="126"/>
>>     </label-set>
>>
>> Posteriormente, deberíamos poder escribir en las etiquetas con:
>>
>> PluginServices.getMainFrame().getStatusBar().setMessage("gpsx",valorx);
>> PluginServices.getMainFrame().getStatusBar().setMessage("gpsy",valory);
>>
>>
>> Esto no funciona, de hecho ni siquiera aparecen las etiquetas en la 
>> barra de estado. He trazado el funcionamiento de la aplicación y he 
>> encontrado que al abrir la vista, hace una llamada al método 
>> setLabelSet(Label[] labels) de la clase 
>> com.iver.andami.ui.mdiFrame.NewStatusBar. Este parámetro labels 
>> incluye las etiquetas definidas en el config.xml de appgvSIG, pero 
>> ninguna de las que define nuestro plugin.
>>
>> ¿Alguien que haya usado esta característica <label-set> nos puede 
>> echar un cable?
>>
>> Gracias
>> Juan G. Jordán Aldasoro
>> Instituto de Robótica
>
> Hola Juan,
> tu interpretación del uso de label-set es correcta, pero hemos 
> detectado un bug que provoca que no funciona como corresponde.
>
> Sin embargo, hay una alternativa. Puedes añadir labels a la barra de 
> estado desde una extensión. Para ello necesitas:
> - crearte una clase Label que extienda de JLabel e implemente IControl 
> (que está en libUI).
> - Añadir las Label que necesites en el initialize() de tu extensión, 
> usando el método
> PluginServices.getMainFrame().addStatusBarControl(CoordsExtension.class, 
> getXLabel());
>
> Estas Labels estarán visibles y activas cuando lo esté tu extensión, 
> igual que cualquier botón de la barra de herramientas.
> Para escribir en ellas, puedes usar el mismo método que comentabas:
>
> PluginServices.getMainFrame().getStatusBar().setMessage("gpsx",valorx);
>
> El ID de una Label se toma de su método getName().
>
> Espero que te sirva. Saludos,
>
>



Más información sobre la lista de distribución gvSIG_desarrolladores