在SWT中将小部件放在后台

时间:2017-08-04 14:44:18

标签: java eclipse macos swt

我试图显示进度条(使用SWT&#39的ProgressBar类)。但是,由于我的窗户背景,酒吧不是很明显。因此,我试图在进度条后面放置一个白色矩形(使用GC.fillRoundedRectangle())。我无法找到在矩形顶部显示进度条的方法。我怎样才能实现"分层"在SWT?

谢谢!

编辑:我试过@ greg-449的建议,但我得到的只是一个空白的窗口 - 我实现了这个错误吗?

public static void main(String [] args){
    Display d = new Display();
    Shell parent = new Shell(d);
    parent.setSize(500, 500);
    parent.open();
    makeBar(parent);

    while (!parent.isDisposed()) {
        if (!d.readAndDispatch()) {
            d.sleep();
        }
    }
}

private static void makeBar(Shell parent) {
    Composite body = new Composite(parent, SWT.NONE);

    GridLayout layout = new GridLayout();
    layout.marginHeight = 20;
    layout.marginWidth = 20;
    body.setLayout(layout);

    body.addListener(SWT.Paint, event ->
      {
        Rectangle rect = body.getClientArea();
        event.gc.setBackground(body.getDisplay().getSystemColor(SWT.COLOR_WHITE));
        event.gc.fillRoundRectangle(rect.x, rect.y, rect.width, rect.height, 20, 20);
      });

    ProgressBar bar = new ProgressBar(body, SWT.HORIZONTAL);

    bar.setMaximum(100);
    bar.setSelection(40);       
}

这是我在运行此代码时看到的内容:

Output of code

1 个答案:

答案 0 :(得分:0)

您可以使用Composite绘制ProgressBar作为孩子。

类似的东西:

Composite body = new Composite(parent, SWT.NONE);

GridLayout layout = new GridLayout();
layout.marginHeight = 20;
layout.marginWidth = 20;
body.setLayout(layout);

body.addListener(SWT.Paint, event ->
  {
    Rectangle rect = body.getClientArea();
    event.gc.setBackground(body.getDisplay().getSystemColor(SWT.COLOR_WHITE));
    event.gc.fillRoundRectangle(rect.x, rect.y, rect.width, rect.height, 20, 20);
  });

ProgressBar bar = new ProgressBar(body, SWT.HORIZONTAL);

bar.setMaximum(100);
bar.setSelection(40);

enter image description here