Динамическая составная часть Eclipse E4 - PullRequest
0 голосов
/ 12 февраля 2019

Я столкнулся с довольно раздражающей проблемой, и мне интересно, знает ли кто-нибудь, как с этим справиться.У меня есть приложение Eclipse RCP e4, которое создает динамические части на основе содержимого файла.

Для каждого файла созданная деталь должна показывать рядом две таблицы (реализованные в виде таблиц NatTable), размер которых должен быть изменен по горизонтали (например, master-detail)

Когда я начал, яЯ подумал, что хорошим способом было бы использовать динамическую составную часть, которую нельзя добавить ни в качестве дескрипторов частей, ни в качестве фрагментов в модель приложения.Насколько я понимаю, цель составной части также состоит в том, чтобы иметь дело с такими сценариями, но я не мог найти способ использовать их динамически.

Чтобы что-то работало, я переключился на этот код,который перерисовывает две таблицы на основе константы, добавляя прослушиватель к событию SWT.Resize.Хотя этот код не совсем то, что я хочу сделать.

public void postConstruct(Composite parent,EMenuService menuService){       
    ...
    Shell shell = parent.getShell();
    Point size = shell.getSize();
    leftGridData.widthHint = (int)(size.x * leftProportion);
    rightGridData.widthHint = size.x - leftGridData.widthHint;

    // adding this configuration adds the styles and the painters to use
    _tableViewLeft.setLayoutData(leftGridData);
    _tableView.setLayoutData(rightGridData);

    _tableView.configure();
    // Tooltip for row/column headings

    shell.addListener(SWT.Resize, new Listener()
    {
        @Override
        public void handleEvent(Event arg0)
        {
            Point size = shell.getSize();

            leftGridData.widthHint = (int) (size.x * leftProportion);
            rightGridData.widthHint = size.x - leftGridData.widthHint;
            shell.redraw();
        }
    });
}

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

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Хотя NatTable учитывает компоновку SWT (как предлагает @ greg-449, и я также рекомендую в качестве правильного решения), столбцы внутри экземпляра NatTable по умолчанию не изменяют размер, чтобы занять все доступное пространство.Ширина столбца имеет фиксированный размер, если вы не настроите его по-другому.Поэтому, как только вы исправили проблему с макетом SWT, вам также необходимо настроить NatTable для определения размера в процентах, что означает, что ширина столбца рассчитывается на основе доступной ширины контейнера.Это можно сделать через DataLayer#setColumnPercentageSizing(boolean)

0 голосов
/ 12 февраля 2019

Для GridLayout все, что вам нужно сделать, это указать «SWT.FILL» и «получить дополнительное пространство» для данных компоновки двух элементов управления.Не нужно прислушиваться к изменению размера.

GridLayout layout = new GridLayout(2, true);
composite.setLayout(layout);

...

GridData leftGridData = new GridData(SWT.FILL, SWT.FILL, true, true);
leftControl.setLayoutData(leftGridData);

...

GridData rightGridData = new GridData(SWT.FILL, SWT.FILL, true, true);
rightControl.setLayoutData(rightGridData);

Если вы хотите иметь возможность вручную настраивать расстояние между элементами управления Sash и SashForm.

...