如何防止在SWT中拖动对话框时选中按钮移动



>当我在按钮栏中的对话框两端创建一个检查按钮和按钮时,默认情况下,它创建得很好,但是当我拖动对话框或调整对话框大小时,复选按钮会远离对话框的左端。当我调整对话框大小时,我应该如何防止它移动。这就是我覆盖按钮栏的方式。

       @Override
   protected void createButtonsForButtonBar(Composite parent) {
    super.createButtonsForButtonBar(parent);

    ((GridLayout) parent.getLayout()).numColumns = ((GridLayout) parent.getLayout()).numColumns+2;
    GridData checkData = new GridData(SWT.LEFT,
            SWT.BOTTOM,true,true);
    GridData labelData = new GridData(SWT.CENTER,
            SWT.CENTER,true,true);
    GridData closeLayoutData = new GridData(SWT.RIGHT,
            SWT.BOTTOM,true,true);
    parent.setLayoutData(closeLayoutData);
    Button close = getButton(IDialogConstants.CANCEL_ID);
    close.setText("Close");
    close.setLayoutData(closeLayoutData);
    close.setParent(parent);
    final Button checkButton = new Button(parent, SWT.CHECK);
    checkButton.setText("View All schedules");
    checkButton.setSelection(false);
    checkButton.setLayoutData(checkData);
    checkButton.setParent(parent);
    checkButton.moveAbove(close);
    checkButton.addSelectionListener(new SelectionAdapter() {
        public void widgetSelected(SelectionEvent e) {
            if (checkButton.getSelection()) {
                treeViewer.setFilters(new ViewerFilter[] { new ExistingExpiredScheduleFilter() });
            } else {
                treeViewer.setFilters(new ViewerFilter[] { new ExistingScheduleFilter() });
            }
        }
    });

    Label label = new Label(parent,SWT.HORIZONTAL);
    label.setLayoutData(labelData);
    label.setParent(parent);
    label.moveAbove(close);
}

这有效:

    protected void createButtonsForButtonBar(Composite parent)
    {
        final GridLayout layout = (GridLayout)parent.getLayout();
        layout.numColumns += 2;
        layout.makeColumnsEqualWidth = false;
        parent.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));    
        final Button checkButton = new Button(parent, SWT.CHECK);
        checkButton.setText("View All schedules");
        checkButton.setSelection(false);
        checkButton.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false));
        // Left out selection code for clarity
        final Label label = new Label(parent, SWT.NONE);
        label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
        createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
        createButton(parent, IDialogConstants.CANCEL_ID, "Close", false);
    }

没有必要打电话给setParent.我已经按顺序创建了东西,所以没有必要重新排序。

最新更新