Devo sostituire il contenuto della cella della griglia dopo aver fatto clic sul pulsante. Ad esempio: c'è Label e ho bisogno di sostituirlo con Text. È possibile con GridLayout? Devo usare SWT.Come sostituire il contenuto della cella della griglia in SWT GridLayout?
6
A
risposta
8
È possibile disporre semplicemente dello Label
e inserire un nuovo Text
al suo posto. GridLayout
utilizza l'ordine z dei bambini per determinare la posizione nella griglia, quindi sarà necessario utilizzare moveAbove()
e moveBelow()
sullo Text
per poterlo ottenere nella posizione corretta. Quindi chiama il layout()
sul genitore. Per esempio:
Text text = new Text(label.getParent(), SWT.BORDER);
text.moveAbove(label);
label.dispose();
text.getParent().layout();
Ecco un widget semplice che illustra esattamente quello che voglio dire:
public class ReplaceWidgetComposite
extends Composite
{
private Label label;
private Text text;
private Button button;
public ReplaceWidgetComposite(Composite parent, int style)
{
super(parent, style);
setLayout(new GridLayout(1, false));
label = new Label(this, SWT.NONE);
label.setText("This is a label!");
button = new Button(this, SWT.PUSH);
button.setText("Press me to change");
button.addSelectionListener(new SelectionAdapter()
{
public void widgetSelected(SelectionEvent e)
{
text = new Text(ReplaceWidgetComposite.this, SWT.BORDER);
text.setText("Now it's a text!");
text.moveAbove(label);
label.dispose();
button.dispose();
ReplaceWidgetComposite.this.layout(true);
}
});
}
}
Non funziona correttamente. Questo codice causa l'inserimento della cella di testo dopo l'etichetta, ma volevo sostituire l'etichetta. dispose() in qualche modo non rimuove l'etichetta dalla griglia perché è ancora visibile. – alhcr
Smaltire un widget dovrebbe rimuoverlo dal suo genitore. Prova a chiamare 'parent.layout (true)'. –
Sembra che non funzioni così. Ho shell.layout (true); e so che funziona perché il testo è inserito e io lo vedo, ma l'etichetta è ancora visibile. L'hai usato da qualche parte e ha funzionato correttamente? – alhcr