Modismo de codificación para implementar un comportamiento personalizado de contracción/expansión en SWT

Tengo un widget personalizado (un grupo que contiene otros compuestos) que se parece a la imagen superior:

Quiero implementar el comportamiento de que cuando el usuario hace doble clic en "algún texto", el widget colapsa a algo como la imagen inferior.

Si se vuelve a hacer doble clic en "algún texto", el widget se expande a la versión original.

Podría implementar esto destruyendo/creando los otros widgets dentro del rectángulo verde (es decir, el texto pequeño, el rectángulo redondeado y el círculo) y luego llamando a pack() en el rectángulo verde al hacer doble clic, pero me preguntaba si había Cuál es un idioma de codificación más elegante para implementar el comportamiento descrito? Nota: no quiero usar un widget con un botón de alternar designado (por ejemplo, un PGroup).

preguntado el 14 de febrero de 14 a las 01:02

1 Respuestas

Si utiliza GridLayout de GridData en cada elemento se puede utilizar:

(GridData)data = (GridData)control.getLayoutData();

data.exclude = true;

control.setVisible(false);

para ocultar un control, cuando todos los controles están ocultos use layout() en el compuesto padre. Para volver a mostrar invertir el exclude y setVisible llamadas.

Respondido 14 Feb 14, 08:02

¡Gracias, Greg! Esto es bastante elegante. ¿Hay alguna manera de que pueda disminuir el tamaño del rectángulo redondeado y el círculo (son objetos de imagen), sin tener que destruir los originales y recrearlos con imágenes de menor tamaño? - Steph

No estoy seguro de lo que quiere decir con objeto de imagen en este contexto. Podrías usar un Label de setImage y simplemente cambiar entre dos imágenes. - greg-449

Esto funciona, Greg. Usé un enfoque similar: un lienzo en el que dibujo imágenes de diferentes tamaños, dependiendo de si el widget está en estado expandido o colapsado. Me preguntaba si existe un método SWT, por ejemplo, "acercar/alejar" que se puede usar con una sola imagen, en lugar de intercambiar diferentes imágenes. - Steph

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.