Если вы используете макеты для своего кода, вам просто нужно создать элемент управления Text и затем повторить макет.
Например, используя GridLayout
:
shell.setLayout(new GridLayout());
final Composite buttonComposite = new Composite(shell, SWT.NONE);
buttonComposite.setLayout(new GridLayout());
final Button button = new Button(buttonComposite, SWT.PUSH);
button.setText("Create Text");
final Composite textComposite = new Composite(shell, SWT.NONE);
textComposite.setLayout(new GridLayout());
button.addSelectionListener(new SelectionAdapter()
{
@Override
public void widgetSelected(final SelectionEvent e)
{
final Text newText = new Text(textComposite, SWT.SINGLE | SWT.BORDER);
newText.setText("New text control");
newText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
// Update the layout
shell.layout(true);
}
});
В качестве альтернативы выможно создать элемент управления «Текст» в начале, но сделать его невидимым и исключить его из макета:
shell.setLayout(new GridLayout());
final Composite buttonComposite = new Composite(shell, SWT.NONE);
buttonComposite.setLayout(new GridLayout());
final Button button = new Button(buttonComposite, SWT.PUSH);
button.setText("Create Text");
final Composite textComposite = new Composite(shell, SWT.NONE);
textComposite.setLayout(new GridLayout());
final Text newText = new Text(textComposite, SWT.SINGLE | SWT.BORDER);
newText.setText("New text control");
// Not visible
newText.setVisible(false);
// Exclude from layout
final GridData data = new GridData(SWT.FILL, SWT.CENTER, true, false);
data.exclude = true;
newText.setLayoutData(data);
button.addSelectionListener(new SelectionAdapter()
{
@Override
public void widgetSelected(final SelectionEvent e)
{
// Include in layout
final GridData data = (GridData)newText.getLayoutData();
data.exclude = false;
// Make visible
newText.setVisible(true);
// Redo layout
shell.layout(true);
}
});