如何在SWT中设计复合材料

问题描述 投票:0回答:2

我想将3个固定大小的组放在A边的合成物中。我想将图像和标签放置在该组的中间。我的示例图像和代码如下。问题是要根据组中的标签大小调整组的大小,并将标签写在组的顶部,但是我希望将位置组的大小固定为相等,以覆盖A边的宽度,并且标签应垂直于组的中间。

private void designComposite() {

    Section sectionA = toolkit.createSection(form.getBody(), Section.TITLE_BAR);
    sectionA.setText("A");

    Composite sectionClientA = toolkit.createComposite(sectionA);
    sectionClientA.setLayout(new RowLayout());

    Composite dynamicDataComp = toolkit.createComposite(sectionClientA);

    dynamicDataComp.setLayout(new RowLayout());

    Group group_incom = new Group(dynamicDataComp, SWT.NONE);
    group_incom.setLayout(new RowLayout());
    Label lbl_img_incom = new Label(group_incom, SWT.CENTER);
    Image img_incom = new Image(lbl_img_incom.getDisplay(),
            "<path>");
    lbl_img_incom.setImage(img_incom);
    group_incom.setText("# of Incoming Messages :");
    Label lbl_incomMsg = toolkit.createLabel(group_incom, "99", SWT.CENTER | SWT.VERTICAL);
    Font incomFont = new Font(lbl_incomMsg.getDisplay(), new FontData("Arial", 12, SWT.BOLD));
    lbl_incomMsg.setFont(incomFont);
    lbl_incomMsg.pack();

    Group group_outgo = new Group(dynamicDataComp, SWT.NONE);
    group_outgo.setLayout(new RowLayout());
    Label lbl_img_outgo = new Label(group_outgo, SWT.CENTER);
    Image img_outgo = new Image(lbl_img_outgo.getDisplay(),
            "<path>");
    lbl_img_outgo.setImage(img_outgo);
    group_outgo.setText("# of Outgoing Messages :");
    Label lbl_outgoMsg = toolkit.createLabel(group_outgo, "145639612", SWT.CENTER);
    Font outgoFont = new Font(lbl_outgoMsg.getDisplay(), new FontData("Arial", 13, SWT.BOLD));
    lbl_outgoMsg.setFont(outgoFont);
    lbl_outgoMsg.pack();

    Group group_error = new Group(dynamicDataComp, SWT.NONE);
    group_error.setLayout(new RowLayout());
    Label lbl_img_error = new Label(group_error, SWT.CENTER);
    Image img_error = new Image(lbl_img_error.getDisplay(),
            "<path>");
    lbl_img_error.setImage(img_error);
    group_error.setText("# of Error Messages :");
    Label lbl_errorMsg = toolkit.createLabel(group_error, "345", SWT.CENTER);
    Font errorFont = new Font(lbl_errorMsg.getDisplay(), new FontData("Arial", 13, SWT.BOLD));
    lbl_errorMsg.setFont(errorFont);
    lbl_errorMsg.pack();

    sectionA.setClient(sectionClientA);

}

enter image description here

java swt eclipse-rcp jface rcp
2个回答
0
投票

使用GridLayout并将列设置为相等的宽度:

Composite dynamicDataComp = new Composite(parent, SWT.NONE);
    dynamicDataComp.setLayout(new GridLayout(3, true));
    dynamicDataComp.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));

Group group_incom = new Group(dynamicDataComp, SWT.NONE);
        group_incom.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
        group_incom.setLayout(new RowLayout());

//...

0
投票

一种方法是将GridLayout用于父组合,并告诉它使用3个相等大小的列:

Composite dynamicDataComp = toolkit.createComposite(sectionClientA);

dynamicDataComp.setLayout(new GridLayout(3, true));
© www.soinside.com 2019 - 2024. All rights reserved.