2011-06-24 12 views
1

TooBarを追加した後で、ウィンドウenter image description hereをリサイズしているときにTopTaskGroup(左のもの) (createAddBtnOnGroupメソッドを参照してください)、ウィンドウのサイズを変更しても拡大しません。何故ですか?SWTコントロールが "余分な垂直スペースを奪う"ことを拒否する

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

おかげで〜あなたの優れた問題の説明のための

答えて

2

感謝!

これは単純なコピー貼り付けのバグです。

あなたcreateNewTaskGroup方法で4行目は

topTasksTable.setLayoutData(getTableGridData()); 

しかし

newTasksTable.setLayoutData(getTableGridData()); 
+0

すべきではない – draw

+0

...私はそれをリファクタリングするつもりだった、リファクタリングのための任意のアイデアをありがとう!私は、70%が、重複したコードを省略するためにリファクタリングする必要があると確信しています。しかし、私はまだ重複したコードの量が相対的に小さいと思っています...それをリファクタリングする明白な方法はありません〜 – draw

関連する問題