Search code examples
layoutswtcompositejava-5

How can I align different elements in two composites?


I try to make this widget : enter image description here

For that I create one composite for the group (with 1 column) and one composite with 2 columns (for the label and text) for id and password

And then, I create one composite for the 3 fields (check box, label and Text) with 3 columns

But, the last line is not align with the id and password because I would like to align vertically the "Retry attemps" with the Text fields :

enter image description here

My code is:

Composite sqlComposite = new Composite(parent, SWT.NONE);
sqlComposite.setLayout(new GridLayout(1, false));
sqlComposite .setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));

Group sqlGoup = new Group(sqlComposite, SWT.NONE);
group.setLayout(new GridLayout(1, false));
group.setText("sql connection");    

Composite sql2Composite = new Composite(sqlGoup, SWT.NONE);
sql2Composite.setLayout(new GridLayout(2, false));
sql2Composite .setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));


Label label = new Label(sql2Composite, SWT.NONE);
label.setText("Id");
Text textBoxID = new Text(sql2Composite, SWT.BORDER);
textBoxID.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));


Label label = new Label(sql2Composite, SWT.NONE);
label.setText("Password");
Text textBoxPass = new Text(sql2Composite, SWT.BORDER);
textBoxPass.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));


Composite sqlButtonsComposite = new Composite(sqlGoup, SWT.NONE);
sqlButtonsComposite.setLayout(new GridLayout(3, false));
sqlButtonsComposite.setLayoutData(new GridData(SWT.NONE, SWT.NONE, false, false));

_encryptCheckButton = new Button(sqlButtonsComposite, SWT.CHECK);
_encryptCheckButton.setText("Encrypt"); 
_encryptCheckButton.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, true, false));

Label labelSpinner = new Label(sqlButtonsComposite , SWT.NONE);
labelSpinner.setText("RetryAttempts");
_retryAttemptsSpinner = new Spinner(sqlButtonsComposite, SWT.BORDER);
_retryAttemptsSpinner.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, true, false));
_retryAttemptsSpinner.setMinimum(MIN_DELTA_SPINNER);
_retryAttemptsSpinner.setMaximum(MAX_DELTA_SPINNER);
_retryAttemptsSpinner.setSelection(DEFAULT_SPINNER_NUMBER);
_retryAttemptsSpinner.setIncrement(INCREMENT_SPINNER_NUMBER);

So my question is : how can I align the id, password and the checkbox named encrypt?

Thanks


Solution

  • You can't get alignment using two Composites easily. So use one Composite with 3 columns and make the text controls span two columns:

    Composite sql2Composite = new Composite(sqlGoup, SWT.NONE);
    // 3 columns
    sql2Composite.setLayout(new GridLayout(3, false));
    sql2Composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
    
    Label label = new Label(sql2Composite, SWT.NONE);
    label.setText("Id");
    
    Text textBoxID = new Text(sql2Composite, SWT.BORDER);
    // Span 2 columns
    textBoxID.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1));
    
    label = new Label(sql2Composite, SWT.NONE);
    label.setText("Password");
    
    Text textBoxPass = new Text(sql2Composite, SWT.BORDER);
    // Span 2 columns
    textBoxPass.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1));
    
    // No second composite
    
    _encryptCheckButton = new Button(sql2Composite, SWT.CHECK);
    _encryptCheckButton.setText("Encrypt");
    // Don't grab extra space
    _encryptCheckButton.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
    
    Label labelSpinner = new Label(sql2Composite , SWT.NONE);
    labelSpinner.setText("RetryAttempts");
    _retryAttemptsSpinner = new Spinner(sql2Composite, SWT.BORDER);
    // Don't grab extra space
    _retryAttemptsSpinner.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
    

    I have added comments above where things need to be changed