Tengo un elemento compuesto, que inicialmente tiene una etiqueta. Ahora llamo a deshacerse de él (la etiqueta) y crear otra etiqueta en el mismo contenedor (olmo compuesto), pero no veo el nuevo texto. Me lleva a preguntarme cómo habilito el redibujado en el compuesto, de modo que la nueva etiqueta (o cualquier otro componente que pueda crear) represente en lugar de la anterior. Aquí está el código que tengo (separados en una unidad de prueba para volver a dibujar un composite)compilación SWT - problema de redibujado
private Label createLabel(Composite parent) {
Label label = new Label(parent, SWT.NONE);
label.setAlignment(SWT.CENTER);
label.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, true));
return label;
}
private void changeText() {
assert testCell != null : "Please initialize test cell";
testCell.getChildren()[0].dispose();
Label l = createLabel(testCell);
l.setText("New TexT");
testCell.redraw();
}
private void draw() {
Display display = new Display();
shell = new Shell(display);
shell.setLayout(new GridLayout(2,false));
testCell = new Composite(shell,SWT.BORDER);
testCell.setLayout(new GridLayout());
Label l = createLabel(testCell);
l.setText("Old Text");
Composite btnCell = new Composite(shell,SWT.NONE);
btnCell.setLayout(new GridLayout());
Button b = new Button(btnCell, SWT.PUSH);
b.setText("Change");
b.addListener(SWT.MouseDown, new Listener() {
public void handleEvent(Event e) {
changeText();
}
});
Como se puede ver, yo estoy llamando a volver a dibujar en el compuesto después agrego un nuevo elemento. Además, he verificado que después de la llamada para desechar, testCell.getChildren(). Length devuelve 0, como se esperaba, y cuando creo una nueva etiqueta, obtengo la misma expresión para devolver 1, verificando que el nuevo elemento realmente está obteniendo agregado a su contenedor compuesto principal ¿Me falta algo aquí?
Lo siento por la reactivación de este tema, pero yo estaba recientemente en busca de solución del problema similar y este tema ha ayudado mucho, pero para cambiar el tamaño de la ventana que tenía que usar 'shell.pack()' 'porque shell.layout() 'no hizo nada. Puede ser que sea útil para alguien. :) – mykola
@mykola: 'shell.pack()' redujo mi ventana y la rediseñé, pero 'shell.layout()' la redibujó y mantuvo su tamaño. Estaba agregando controles a una ventana después de 'shell.open()' y los controles no aparecían. 'shell.layout()' lo resolvió. – gregn3
Dado el javadoc en el diseño(), 'testCell.requestLayout();' sería incluso mejor – titou10