2017-08-04 2 views
0

Ich versuche, eine Fortschrittsanzeige anzuzeigen (mit SWT ProgressBar-Klasse). Die Leiste ist jedoch aufgrund des Hintergrunds meines Fensters nicht gut sichtbar. Daher versuche ich, ein weißes Rechteck (mit GC.fillRoundedRectangle()) hinter dem Fortschrittsbalken zu platzieren. Ich kann keine Möglichkeit finden, den Fortschrittsbalken oben auf dem Rechteck anzuzeigen. Wie kann ich in SWT "Layering" erreichen?Platzierung eines Widgets im Hintergrund in SWT

Danke!

EDIT: Ich versuchte @ greg-449's Vorschlag, aber alles, was ich bekam, war ein leeres Fenster - implementiere ich das falsch? Diese

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);  
} 

ist das, was ich sehe, wenn ich diesen Code ausführen:

Output of code

+0

Sie haben kein Layout auf Ihrer Shell setzen, müssen Sie ein Layout haben jede Kunstoff (einschließlich Shell). Ich benutze 'shell.setLayout (new GridLayout());' –

+0

@ greg-449 das Problem mit Layouts ist, dass das Hinzufügen eines Layouts zu meiner Shell vermasselt die anderen Schaltflächen und Textfelder, die ich auf meiner Shell habe - gibt es einen Weg Tun Sie dies, ohne ein Layout zu meiner Shell hinzuzufügen? –

+0

Sie können sich mit SetBounds herumschlagen, aber ich kann Ihnen dabei nicht helfen, da ich es nie benutze. –

Antwort

0

Sie haben soeben einen Composite verwenden können, die Sie mit dem ProgressBar als Kind malen.

Etwas wie:

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

Ich habe das versucht, aber es hat nicht funktioniert. Siehe die Frage für Code und Ausgabe. –

Verwandte Themen