Debasish Halder
Debasish Halder

Reputation: 173

How to create a text box when click on button in swt?

I have created 2 composite in swt. 1 button created inside 1st composite. I want to create one text box when I will click on the button. But I am unable to do that functionality.

Upvotes: 0

Views: 637

Answers (1)

greg-449
greg-449

Reputation: 111142

Assuming you are using layouts for your code you just need to create the Text control and then redo the layout.

For example, using 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);
    }
  });

Alternatively you can create the Text control at the beginning but make it not visible and exclude it from the layout:

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);
    }
  });

Upvotes: 1

Related Questions