Как создать текстовое поле при нажатии кнопки в SWT? - PullRequest
0 голосов
/ 11 октября 2018

Я создал 2 композитных в SWT.1 кнопка создана внутри 1-го композита.Я хочу создать одно текстовое поле, когда я нажму на кнопку.Но я не могу выполнить эту функцию.

1 Ответ

0 голосов
/ 11 октября 2018

Если вы используете макеты для своего кода, вам просто нужно создать элемент управления 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);
    }
  });
...