如何正确配置此GridLayout?

时间:2019-02-06 21:01:58

标签: java swt eclipse-rcp

可悲的是,我远不是SWT和RCP方面的​​专家,但是我在这里确实尽了最大努力。。。我不知道如何配置小部件来获得这种布局(只是一个Photoshop屏幕,从未使用过)这样):

expected screen

这是我将GridLayout的列号设置为2时得到的:

2 columns

这是错误行中的“刷新”和“黑名单”按钮,但至少所有内容都是可见的...

这是我将GridLayout的列号设置为3时得到的结果:

3 columns

这完全搞砸了...大多数小部件都被推到可见区域之外。 DatePicker,Refresh,Whitelist和Calculate按钮不可见,它们位于右侧的外面。

这是此屏幕区域的代码部分:

resultingProductsGroup = new Group(propProdGroup, SWT.NONE);
final GridData gd_resultingProductsGroup = new GridData(SWT.FILL,
        SWT.CENTER, true, false);
gd_resultingProductsGroup.widthHint = 240;
resultingProductsGroup.setLayoutData(gd_resultingProductsGroup);
resultingProductsGroup.setText("Resulting products");
final GridLayout gridLayout_4 = new GridLayout();
gridLayout_4.numColumns = 2;
resultingProductsGroup.setLayout(gridLayout_4);

Label refDateLabel = new Label(resultingProductsGroup, SWT.NONE);
refDateLabel.setText("Reference date:");

refDateInput = new DateInput(resultingProductsGroup, SWT.BORDER);
refDateInput.setLayoutData(new GridData());

refDateInput.setValue(new Date());

calculateProductsButton1 = new Button(resultingProductsGroup, SWT.NONE);
setupImageButton(calculateProductsButton1, Images.getButtonRefresh());
calculateProductsButton1.setLayoutData(new GridData());
GridDataFactory.swtDefaults().hint(18, 18).applyTo(
        calculateProductsButton1);

resultingProductsTable = new TableListWidget<Product>(
        resultingProductsGroup, SWT.BORDER, ListWidgetMode.MULTI);
resultingProductsTable.setLinesVisible(true);
resultingProductsTable.setHeaderVisible(true);
final GridData rpTableProperty = new GridData(SWT.FILL, SWT.FILL, true,
        true, 3, 1);
resultingProductsTable.setLayoutData(rpTableProperty);

GridDataFactory.swtDefaults().hint(230, 240).applyTo(
        resultingProductsTable);


setupResultingProductsTableColumns();
resultingProductsTable.sortByComparator(new Comparator<Product>() {
    @Override
    public int compare(Product o1, Product o2) {
        return o1.getPartNum().getExternalId().compareTo(
                o2.getPartNum().getExternalId());
    }
});
resultingProductsTable.addOpenListener(new IOpenListener() {
    @Override
    public void open(OpenEvent event) {
        doResultingProductsTableOpen();
    }
});

calculateProductsButton2 = new Button(resultingProductsGroup, SWT.NONE);
calculateProductsButton2.setText("Calculate");

whitelistAddButton = new Button(resultingProductsGroup, SWT.NONE);
whitelistAddButton.setText("Whitelist");
whitelistAddButton.addSelectionListener(new SelectionAdapter() {
    @Override
    public void widgetSelected(final SelectionEvent e) {
        doAddToWhitelist();
    }
});

blacklistAddButton = new Button(resultingProductsGroup, SWT.NONE);
blacklistAddButton.setText("Blacklist");
blacklistAddButton.addSelectionListener(new SelectionAdapter() {
    @Override
    public void widgetSelected(final SelectionEvent e) {
        doAddToBlacklist();
    }
});

我在这里没看到什么?我在这个GUI错误中停留了2天以上了……请帮帮我:)

1 个答案:

答案 0 :(得分:0)

您可以使用一个GridLayout和3列设计整个组合,同时在表上使用3的水平跨度。但是,这并不能为您提供所需的模拟屏幕,因为底部的参考日期控件和按钮将按列对齐。

尝试使用3种复合材料

  • 参考日期:行布局
  • 表格:填充布局
  • 按钮列表:行布局