Изменение размера таблицы с оболочкой и выравнивание кнопок? - PullRequest
0 голосов
/ 29 июня 2018

Может кто-нибудь сказать мне, как изменить размер моей таблицы, если я перетащу границу оболочки. Другими словами, я хочу, чтобы конец моей таблицы был подключен к оболочке, чтобы при изменении размера оболочки следовала таблица. Также у меня проблема с кнопками. Мне нужно, чтобы они были расположены в правом нижнем углу, под таблицей, но что бы я ни установил для выравнивания (GridData.HORIZONTAL_ALIGN_BEGINNING или новых GridData (SWT.END, SWT.END, false, false) или новых GridData (SWT.END, SWT.BOTTOM, false, false) все то же самое, что и вывод) устанавливает две мои кнопки слева внизу и одну справа внизу. Вот код и картинки таблицы:

try {
        display = new Display();
    } catch (Exception ex) {
        ex.printStackTrace();
    }

    shell = new Shell(display);
    shell.setLayout(new GridLayout());

    GridLayout layout = new GridLayout();
    shell.setLayout(layout);

    Composite composite = new Composite(shell, SWT.NONE);
    // Create a composite to hold the children
    GridData gridData = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.FILL_BOTH);
    composite.setLayoutData(gridData);

    // Set numColumns to 3 for the buttons
    GridLayout layout1 = new GridLayout(3, false);
    layout1.marginWidth = 4;
    composite.setLayout(layout1);

    int style = SWT.SINGLE | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | 
            SWT.FULL_SELECTION | SWT.HIDE_SELECTION;
    final int NUMBER_COLUMNS = 6;
    table = new Table(composite, style);

    GridData gridData1 = new GridData(GridData.FILL_BOTH);
    gridData1.grabExcessVerticalSpace = true;
    gridData1.horizontalSpan = 3;
    table.setLayoutData(gridData1);

    table.setLinesVisible(true);
    table.setHeaderVisible(true);

    String[] titles = { methodHeader, messageHeader, parametersHeader, resultHeader, deltaHeader, assertionHeader};
    for (int i = 0; i < titles.length; i++) {
        TableColumn column = new TableColumn(table, SWT.LEFT, i);
        column.setText(titles[i]);
        table.getColumn(i).pack();
    }


    addDataToTableModel(methodList);

    GridData gridData2 = new GridData(SWT.END, SWT.END, false, false);
    gridData2.widthHint = 80;

    buttonOk = new Button(composite, SWT.PUSH | SWT.CENTER);
    buttonOk.setText(ok);
    buttonOk.setLayoutData(gridData2);

    buttonCancel = new Button(composite, SWT.PUSH | SWT.CENTER);
    buttonCancel.setText(cancel);
    /*GridData gridData3 = new GridData(SWT.END, SWT.END, false, false);
    gridData3.widthHint = 80;*/
    buttonCancel.setLayoutData(gridData2);

    buttonHelp = new Button(composite, SWT.PUSH | SWT.CENTER);
    buttonHelp.setText(help);
    /*GridData gridData4 = new GridData(SWT.END, SWT.END, false, false);
    gridData4.widthHint = 80;*/
    buttonHelp.setLayoutData(gridData2); 

This is how my frame looks when I run this code 2 кнопки слева, 1 справа.

EDIT1: Пробовал использовать разные GridData для каждой кнопки:

    GridData gridData2 = new GridData(SWT.END, SWT.END, false, false);
    gridData2.widthHint = 80;

    buttonOk = new Button(composite, SWT.PUSH | SWT.CENTER);
    buttonOk.setText(ok);
    buttonOk.setLayoutData(gridData2);

    buttonCancel = new Button(composite, SWT.PUSH | SWT.CENTER);
    buttonCancel.setText(cancel);
    GridData gridData3 = new GridData(SWT.END, SWT.END, false, false);
    gridData3.widthHint = 80;
    buttonCancel.setLayoutData(gridData3);

    buttonHelp = new Button(composite, SWT.PUSH | SWT.CENTER);
    buttonHelp.setText(help);
    GridData gridData4 = new GridData(SWT.END, SWT.END, false, false);
    gridData4.widthHint = 80;
    buttonHelp.setLayoutData(gridData4); 

Тот же результат для кнопок.

1 Ответ

0 голосов
/ 29 июня 2018

Используйте 4 столбца для макета:

final GridLayout layout1 = new GridLayout(4, false);

и используйте пустую метку-заполнитель, чтобы освободить место слева от кнопок:

Label filler = new Label(composite, SWT.LEAD);
filler.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));

GridData gridData2 = new GridData(SWT.END, SWT.END, false, false);
gridData2.widthHint = 80;

Button buttonOk = new Button(composite, SWT.PUSH | SWT.CENTER);
buttonOk.setText("OK");
buttonOk.setLayoutData(gridData2);

gridData2 = new GridData(SWT.END, SWT.END, false, false);
gridData2.widthHint = 80;

Button buttonCancel = new Button(composite, SWT.PUSH | SWT.CENTER);
buttonCancel.setText("Cancel");
buttonCancel.setLayoutData(gridData2);

gridData2 = new GridData(SWT.END, SWT.END, false, false);
gridData2.widthHint = 80;

Button buttonHelp = new Button(composite, SWT.PUSH | SWT.CENTER);
buttonHelp.setText("Help");
buttonHelp.setLayoutData(gridData2);
...