2011-06-24 38 views
1

這種情況是TopTaskGroup(左邊的一個)在調整窗口大小的同時可以「調整多餘的垂直空間」enter image description here,但NewTaskGroup(正確的)在添加TooBar之後它(請參閱createAddBtnOnGroup方法),它不隨着您調整窗口大小而增長。這是爲什麼?一個SWT控件拒絕「抓取多餘的垂直空間」

(我有2列的網格佈局一個shell實例)

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(); 
} 

謝謝〜

回答

2

感謝您出色的問題說明!

在我看來,這是一個簡單的複製粘貼錯誤。

第四行中的createNewTaskGroup方法不應該是

topTasksTable.setLayoutData(getTableGridData()); 

newTasksTable.setLayoutData(getTableGridData()); 
+0

謝謝你,我會重構它... – draw

+0

對重構的任何想法?我,就像70%的人相信,它應該被重構以省略重複的代碼。但我仍然認爲重複代碼的數量相對較小......並且沒有明顯的方式來重構它 – draw