java - SWT - 最后一列不会占用多余的水平空间

标签 java layout swt

我有 4 列的 GridLayout,但无法获取最后一列(带有路径 Text 小部件的列)来获取多余的水平空间。

enter image description here

    @Override 
    protected Control createDialogArea(Composite parent) {

    Composite composite = (Composite) super.createDialogArea(parent);

    ((GridLayout)composite.getLayout()).numColumns = 2;


    Label label = null;
    GridData data = null;
    Composite compo = null;
    Composite compo2 = null;
    GridLayout layout = null;

    // accounts label
    label = new Label(composite, SWT.LEFT);
    label.setText("Accounts");

    data = new GridData();
    data.horizontalSpan = 2;
    label.setLayoutData(data);

    //accounts combo
    ComboViewer accountsCombo = new ComboViewer(composite);
    accountsCombo.getCombo().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));

    //accounts add button
    Button btnAddAccount = new Button(composite, SWT.PUSH);
    btnAddAccount.setText(BUTTON_ADD_ACC_LABEL);
    btnAddAccount.setLayoutData(new GridData());

    // repo-package composite
    compo = new Composite(composite, SWT.NONE);
    data = new GridData(SWT.FILL, SWT.FILL, true, false);
    data.horizontalSpan = 2;
    compo.setLayoutData(data);
    layout = new GridLayout();
    layout.marginWidth = 0;
    layout.numColumns = 2;
    compo.setLayout(layout);

    //repo composite
    compo2 = new Composite(compo, SWT.NONE);
    data = new GridData(SWT.FILL, SWT.FILL, true, false);
    compo2.setLayoutData(data);
    layout = new GridLayout();
    layout.marginWidth = 0;
    compo2.setLayout(layout);

    //repo label
    Label repoLabel = new Label(compo2, SWT.LEFT);
    repoLabel.setText("Repository");

    //repo combo
    ComboViewer repoCombo = new ComboViewer(compo2);
    repoCombo.getCombo().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));

    //package composite
    compo2 = new Composite(compo, SWT.NONE);
    compo2.setLayoutData(data);
    layout = new GridLayout();
    layout.marginWidth = 0;
    compo2.setLayout(layout);

    //package label
    label = new Label(compo2, SWT.LEFT);
    label.setText("Package");

    //package combo
    ComboViewer packageCombo = new ComboViewer(compo2);
    packageCombo.getCombo().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));

    // version group
    Group versionGroup = new Group(composite, SWT.NONE);
    versionGroup.setText("Version");
    data = new GridData(SWT.FILL, SWT.FILL, true, false);
    data.horizontalSpan = 2;
    versionGroup.setLayoutData(data);
    layout = new GridLayout();
    versionGroup.setLayout(layout);

    // replace radio
    Button radioReplaceVersion = new Button(versionGroup, SWT.RADIO);
    radioReplaceVersion.setText("replace");
    radioReplaceVersion.setSelection(true);

    // replace composite
    compo = new Composite(versionGroup, SWT.NONE);
    data = new GridData(SWT.FILL, SWT.FILL, true, false);
    layout = new GridLayout();
    layout.numColumns = 4;
    compo.setLayoutData(data);
    compo.setLayout(layout);

    // name label
    label = new Label(compo, SWT.LEFT);
    label.setText("name:");
    data = new GridData(SWT.LEFT, SWT.CENTER, false, false);
    label.setLayoutData(data);

    // name text widget
    Text nameText = new Text(compo, SWT.SINGLE | SWT.BORDER);
    data = new GridData(SWT.FILL, SWT.FILL, false, false);
    data.widthHint = 150;
    nameText.setLayoutData(data);

    // path label
    label = new Label(compo, SWT.LEFT);
    label.setText("path:");
    data = new GridData(SWT.LEFT, SWT.CENTER, false, false);
    label.setLayoutData(data);

    // path text widget
    Text pathText = new Text(compo, SWT.SINGLE | SWT.BORDER);
    data = new GridData(SWT.FILL, SWT.FILL, true, false);
    pathText.setData(data);

    /*
    for (Control cnt : compo.getChildren()) {
        cnt.setEnabled(false);
    }
    */
    // new radio
    Button radioNewVersion = new Button(versionGroup, SWT.RADIO);
    radioNewVersion.setText("new");


    //resource label
    label = new Label(composite, SWT.LEFT);
    label.setText("Resources");
    data = new GridData();
    data.horizontalSpan = 2;
    label.setLayoutData(data);

    // resource composite
    compo = new Composite(composite, SWT.NONE);
    compo.setLayout(new GridLayout());
    data = new GridData(SWT.FILL, SWT.FILL, true, true);
    data.horizontalSpan = 2;
    compo.setLayoutData(data);

    // resource widget
    createResourcesGroup(compo);

    return parent;

}

最佳答案

行:

pathText.setData(data);

应该是:

pathText.setLayoutData(data);

setLayoutData 不是 setData

关于java - SWT - 最后一列不会占用多余的水平空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31896173/

相关文章:

java - 将 ThreeTen 向后移植到 JSR-310 进行比较

html - 如何实现多行 flexbox?

java - 在第一个对话框打开时,Eclipse RAP 中的 SWT Label 中的中文语言环境中的一些字符串被截断

java - For循环导致JFrame(Eclipse)黑屏

java - 无需用户交互即可开始视频聊天 - Android

java - 如何更改弹出布局的背景?

java - 展开 Item 后将焦点集中到 ExpandBar 上的 ExpandItem

java - 在 Jigloo 中设置 Image 时出现 IllegalArgumentException

java - 如何向表中插入\计时值?

java - 绝对布局——按钮居中