SWT-контроль отказывается «захватывать лишнее вертикальное пространство» - PullRequest
1 голос
/ 24 июня 2011

Дело в том, что TopTaskGroup (слева) может «захватить лишнее вертикальное пространство» при изменении размера окна enter image description here, но NewTaskGroup (справа) после добавления на него TooBar (см. Метод createAddBtnOnGroup), он не растет при изменении размера окна.Почему это так?

(у меня есть экземпляр оболочки с 2-столбцовым GridLayout)

enter image description here

Код здесь:

private void createTaskWidgets() {
    createTopTaskGroup();
    createNewTaskGroup();
}

private void createTopTaskGroup() {
    Group topTasksGroup = new Group(shell, SWT.SHADOW_NONE);
    topTasksGroup.setText(TaskConsts.TOP_TASK_LIST);

    topTasksTable = new TaskTable(topTasksGroup, TaskTable.SORT_BY_VOTES, iteration, this);
    topTasksTable.setLayoutData(getTableGridData() );

    topTasksGroup.setLayout(new GridLayout() );
    topTasksGroup.setLayoutData(getTableGridData() );
    topTasksGroup.pack();
}

private void createNewTaskGroup() {
    Group newTasksGroup = new Group(shell, SWT.SHADOW_NONE);
    newTasksGroup.setText(TaskConsts.NEW_TASK_LIST);

    newTasksTable = new TaskTable(newTasksGroup, TaskTable.SORT_BY_CREATION_TIME, iteration, this);
    topTasksTable.setLayoutData(getTableGridData() );

    ToolBar actionToolBar = createAddBtnOnGroup(newTasksGroup);

    newTasksGroup.setLayout(new GridLayout() );
    newTasksGroup.setLayoutData(getTableGridData() );
    newTasksGroup.layout();
    newTasksGroup.pack();

    // set actionToolBar's location to newTasksGroup's right-top position
    actionToolBar.setLocation(
            newTasksGroup.getLocation().x + newTasksGroup.getSize().x
                    - actionToolBar.getSize().x - 5,
            newTasksGroup.getLocation().y - 2);
}

private GridData getTableGridData() {
    GridData gridData = new GridData(0, SWT.FILL, false, true);
    return gridData;
}

private ToolBar createAddBtnOnGroup(Group newTasksGroup) {
    ToolBar actionToolBar = new ToolBar(newTasksGroup, SWT.HORIZONTAL | SWT.RIGHT);

    addTaskToolItem = new ToolItem(actionToolBar, SWT.PUSH | SWT.RIGHT);
    addTaskToolItem.setImage(new Image(display, TaskConsts.ICON_PLUS));

    final MainWindow mainWindow = this;
    addTaskToolItem.addSelectionListener(new SelectionAdapter() {
        public void widgetSelected(SelectionEvent e) {
            new CreateTask(getShell(), mainWindow);
        }
    });

    GridData gridData = new GridData();
    gridData.exclude = true;
    actionToolBar.setLayoutData(gridData);

    actionToolBar.pack();

    return actionToolBar;
}

private void organize() {
    GridLayout gridLayout = new GridLayout(2, false);
    shell.setLayout(gridLayout);
    shell.pack();
}

Заранее спасибо ~

1 Ответ

2 голосов
/ 24 июня 2011

Спасибо за отличное описание проблемы!

Мне кажется, что это простая ошибка копирования-вставки.

Четвертая строка в вашем createNewTaskGroup методе должнане быть

topTasksTable.setLayoutData(getTableGridData() );

, но

newTasksTable.setLayoutData(getTableGridData() );
...