Проблемы компоновки с настроенным FieldEditor (страница настроек Eclipse) - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь создать свой собственный FieldEditor (так как я должен динамически заполнять значения поля со списком). Так что мой класс расширяет FieldEditor. Моей странице предпочтений нужны 3 из этих полей, которые затем выглядят так (2-й, 3-й и 4-й полевые редакторы; «выберите ядро»).

enter image description here

Очевидно, что что-то идет не так с макетом. Все поля должны выглядеть как 3-е поле - с использованием полного пробела.

@Override
protected void adjustForNumColumns(int numColumns) {
    ((GridData) c_top.getLayoutData()).horizontalSpan = numColumns;
}

@Override
protected void doFillIntoGrid(Composite parent, int numColumns) {

    /* Layout comments:
     * 
     * component are sequentially filled into numColumns
     * by default each component will use 1 column
     * GridData can be set to use more that one columns
     */

    GridData gd = new GridData(SWT.FILL, SWT.TOP, true, false);
    gd.horizontalSpan = numColumns;

    c_top = parent;
    c_top.setLayoutData(gd);

    c_group = new Composite(c_top, SWT.BORDER);

    GridLayout newgd = new GridLayout(2, false);
    c_group.setLayout(newgd);
    c_group.setLayoutData(gd);

    // kernel spec combo

    Label comboLabel = new Label(c_group, SWT.NONE);
    comboLabel.setText("Select kernel");
    gd = new GridData(SWT.LEFT, SWT.TOP, false, false);
    gd.horizontalSpan = numColumns - 1;
    comboLabel.setLayoutData(gd);

    c_kernelCombo = new Combo(c_group, SWT.READ_ONLY);
    gd = new GridData(SWT.FILL, SWT.TOP, true, false);
    //gd.horizontalSpan = 1;
    c_kernelCombo.setLayoutData(gd);     
}

Я даже попробовал более простой макет без использования группы, но тогда все мои полевые редакторы использовали только 2 ячейки сетки (что выглядит несколько забавно с 3 столбцами, предоставленными другими полевыми редакторами.

Понятия не имею, как это исправить. Кто-нибудь может помочь, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 26 июня 2019

У меня есть решение, но я не знаю, правильно ли оно:

1) Я сделал ошибку, создав все редакторы FieldEditors этой страницы с одним и тем же родителем, хотя в документах говорится, что нужно получить нового родителя для каждого редактора полей с помощью getFieldEditorParent()

2) Полагаю, я неправильно понял значение adjustForNumColumns(int numColumns). Я полагаю, он должен адаптировать горизонтальный диапазон элементов управления, на которые влияет изменение количества столбцов. Теперь мой код выглядит так:

@Override
protected void adjustForNumColumns(int numColumns) {
    ((GridData) c_kernelCombo.getLayoutData()).horizontalSpan = numColumns-1;
}

@Override
protected void doFillIntoGrid(Composite parent, int numColumns) {

    // kernel spec combo
    Label comboLabel = new Label(parent, SWT.NONE);
    comboLabel.setText("Select kernel");
    GridData gd = new GridData(SWT.LEFT, SWT.TOP, false, false);
    gd.horizontalSpan = 1;
    comboLabel.setLayoutData(gd);

    c_kernelCombo = new Combo(parent, SWT.READ_ONLY);
    gd = new GridData(SWT.FILL, SWT.TOP, true, false);
    gd.horizontalSpan = numColumns - 1;
    c_kernelCombo.setLayoutData(gd);     
}
0 голосов
/ 25 июня 2019

Вы устанавливаете один и тот же экземпляр GridData (gd) на двух элементах управления - это , не разрешено.Вы должны создать новый GridData для каждого элемента управления.

В любом случае вам не следует устанавливать данные макета для parent Composite - который не принадлежит вашему коду.

...