2017-08-04 45 views
0

我想顯示一個進度條(使用SWT的ProgressBar類)。但是,由於我的窗口背景,酒吧不是很明顯。因此,我試圖在進度條後面放置一個白色矩形(使用GC.fillRoundedRectangle())。我找不到在矩形頂部顯示進度條的方法。我如何在SWT中實現「分層」?在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

+0

你有沒有在你的shell中設置的佈局,每個組合(包括殼牌)必須有一個佈局。我使用了'shell.setLayout(new GridLayout());' –

+0

@ greg-449佈局的問題是向我的shell添加布局會弄亂我的shell中的其他按鈕和文本字段 - 有沒有辦法做到這一點,而無需向我的外殼添加布局? –

+0

你可以用setBounds搞定,但我無法幫助你,因爲我從來沒有用過。 –

回答

0

你可以只使用您與ProgressBar作爲一個孩子畫一個Composite

喜歡的東西:

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

+0

我試過這個,但沒有奏效。查看代碼和輸出的問題。 –

相關問題