Как использовать две схемы сетки в одной композиции - PullRequest
0 голосов
/ 26 июня 2019

У меня проблемы с Composite. Я написал следующий код:

final Composite mavniOptionsComposite = new Composite(parent, SWT.NONE);
mavniOptionsComposite.setLayout(new GridLayout(3, false));

final GridData textGridData = new GridData(SWT.FILL, SWT.FILL, true, false, 2, 1);

final Label mavniFormatingLabel = new Label(mavniOptionsComposite, SWT.None);
mavniFormatingLabel.setText(PFT.MAVNI_HISTORY.getExplanationLabelText());
mavniFormatingLabel.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));

final GridData mavniFormatingGridData = new GridData(SWT.BEGINNING, SWT.CENTER, false, false);
final Button mavniHistoryRunCheckbox = new Button(mavniOptionsComposite, SWT.CHECK);
mavniHistoryRunCheckbox.setLayoutData(mavniFormatingGridData);
mavniHistoryRunCheckbox.setText(PFT.MAVNI_HISTORY.getExplanationLabelText());
mavniHistoryRunCheckbox.addSelectionListener(new mavniHistoryCheckBoxSelectionAdapter());
widgetsMap.put(PFT.MAVNI_HISTORY, mavniHistoryRunCheckbox);

final Button mavniRealtimeCheckbox = new Button(mavniOptionsComposite, SWT.CHECK);
mavniRealtimeCheckbox.setLayoutData(mavniFormatingGridData);
mavniRealtimeCheckbox.setText(PFT.MAVNI_REALTIME.getExplanationLabelText());
mavniRealtimeCheckbox.setEnabled(MyPreferences.isWmcDefined());
widgetsMap.put(PFT.MAVNI_REALTIME, mavniRealtimeCheckbox);

final Label toolNameLabel = new Label(mavniOptionsComposite, SWT.NONE);
toolNameLabel.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
toolNameLabel.setText(PFT.TOOL_NAME.getExplanationLabelText());

final Text toolNameText = new Text(mavniOptionsComposite, SWT.SINGLE | SWT.LEAD | SWT.BORDER);
toolNameText.setLayoutData(textGridData);
widgetsMap.put(PFT.TOOL_NAME, toolNameText);

final Label toolVersionLabel = new Label(mavniOptionsComposite, SWT.NONE);
toolVersionLabel.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
toolVersionLabel.setText(PFT.TOOL_VERSION.getExplanationLabelText());

final Text toolVersionText = new Text(mavniOptionsComposite, SWT.SINGLE | SWT.LEAD | SWT.BORDER);
toolVersionText.setLayoutData(textGridData);
widgetsMap.put(PFT.TOOL_VERSION, toolVersionText);

mavniOptionsComposite.setLayout(new GridLayout(2, false));

new MavniOptionViewer(MyPreferences.getMavniOptionsList()).createViewer(mavniOptionsComposite);

createExpandItem(parent, mavniOptionsComposite, "Mavni Options", com.mavni.ui.Activator
        .getDefault().getImageRegistry().get(IImageKeys.EXECUTE.getPath()), false);

Но я получаю следующее поведение:

Я бы хотел, чтобы таблица расширилась до полного макета. Как я понимаю, это происходит потому, что я установил setLayout(new GridLayout(3, false));, а таблица содержит только два столбца. Если я установлю mavniOptionsComposite.setLayout(new GridLayout(2, false));, то таблица будет работать как положено, но другие элементы не будут отображаться там (как должно быть сейчас).

Разыскиваемое лицо:

Сначала я решил создать два GridLayouts и вставить их в один композит. Я пытался найти способ объединить две компоновки в одну композицию, но не смог найти способ. Мне нужен один композит, потому что createExpandItem работает только с одним композитом. Как это решить?

РЕДАКТИРОВАТЬ : В MavniOptionViewer у меня есть:

public void createViewer(final Composite parent) {
    commandsTable = new Table(parent, SWT.BORDER | SWT.FULL_SELECTION);
    commandsTable.setHeaderVisible(true);
    commandsTable.setLinesVisible(true);
    final GridData data = new GridData(SWT.FILL, SWT.FILL, true, true, 2, 5);
    data.heightHint = 120;
    commandsTable.setLayoutData(data);
    final Map<ButtonTypeEnum, Button> buttons = ButtonComboFactory.createAddRemoveCombo(parent);
    final Button add = buttons.get(ButtonTypeEnum.ADD);
    final Button remove = buttons.get(ButtonTypeEnum.REMOVE);
    ...

Я думаю о другом возможном решении. Можно ли изменить createViewer, чтобы в таблице было 3 столбца, а кнопки add remove находились в отдельной строке. Как это сделать?

Ответы [ 2 ]

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

Вы можете оставить свой основной Composite с GridLayout из 3 столбцов и указать таблице занять все 3 из этих столбцов вместо 2, как вы делаете сейчас.

Вы можете сделать это с помощьюизменение horizontal span таблицы GridData с 2 на 3:

final GridData data = new GridData(SWT.FILL, SWT.FILL, true, true, 3, 5);

Также не следует повторно использовать GridData объекты;из документации :

Каждый элемент управления в Composite, управляемый GridLayout, должен иметь уникальный объект GridData.

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

Композит может иметь только один макет, вы не можете изменить его на полпути. Он просто будет использовать последний макет, который вы установили для всего.

Вы можете использовать несколько Композитов в содержащем Композит.

...