获取SWT视图的大小

时间:2018-07-13 13:15:14

标签: java eclipse-plugin swt

我正在尝试确定SWT视图的大小,以便可以在插件中正确布置窗口小部件。我正在Java 8的Eclipse Neon上运行。

我正在使用的代码如下:

import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.RowData;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.part.ViewPart;

import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;


public class ClockView extends ViewPart {

/**
     * The constructor.
     */
    public ClockView() {
    }

    /**
     * This is a callback that will allow us
     * to create the viewer and initialize it.
     */
    @Override
    public void createPartControl(Composite parent) {
        final RowLayout layout = new RowLayout(SWT.HORIZONTAL);
        layout.center = true;
        layout.justify = true;
        final Point area = parent.getSize();
        final ImmutableList<Integer> clockWidths = ImmutableList.<Integer>of(100, 200, 400);
        layout.marginWidth = (area.x - Iterables.getLast(clockWidths, null)) / 2;
        layout.marginHeight = (area.y - Iterables.getLast(clockWidths, null)) / 2;
        parent.setLayout(layout);
        clockWidths.forEach(width -> {
            ClockWidget c = new ClockWidget(parent, SWT.NONE);
            c.setLayoutData(new RowData(width, width));
        });
    }
    /**
     * Passing the focus request to the viewer's control.
     */
    @Override
    public void setFocus() {
    }

}

我的问题是,我尝试的每个方法都返回0,视图的大小返回0。我已经尝试过scrollable.getClientArea和Composite.getSize。

如何确定可以使用的区域?

1 个答案:

答案 0 :(得分:3)

调用createPartControl时,大小尚未确定。

设置大小后将发生Resize事件。

在主getClientArea()上使用Composite来获取视图区域的大小。