SWT - Composite redraw

moltee

Grünschnabel
Hallo,
ich habe folgendes Problem:
Ich habe einen Composite (in einem ScrolledComposite und der ist inner Shell (weiß nicht, ob das relevant ist)) und füge ihm während der Laufzeit ein Label hinzu.
Das wird aber erst dann angezeigt, wenn ich die größe der Shell ändere. Habe es schon mit composite.redraw() und shell.redraw() probiert. nix...:(
Kann mir da jemand helfen?

Ne andere Frage: Ich suche nach einer Möglichkeit so eine Fußzeile mit Schatten am oberen Rand, wie sie im Windows XP Design bei Windows XP üblicherweise z.B. im Explorer zu finden ist, in SWT zu realisieren (siehe Grafik). Gibts das was?

Vielen Dank für eure Hilfe!
Gruß, Malte
 

Anhänge

  • 26815attachment.jpg
    26815attachment.jpg
    38,6 KB · Aufrufe: 533
Rufe auf dem Label einfach einmal layout() auf, dann sollte es auch angezeigt werden.

Das verändern der Größe der Shell führt zumindest auch dazu, dass ein layout() für alle Widgets der Shell aufgerufen wird.

Zu deiner zweiten Frage:
Du könntest ein Composite mit dem style SWT.BORDER benutzen.
 
du meintest wahrscheinlich update(), oder?
layout() gibts nämlich nicht. aber auch das klappt nicht, habs mit allen beteiligten widgets versucht.

wenn ich pack() beim Composite nehme erscheinen zwar die labels, doch der ScrolledComposite aktualisiert seine Scrollbar nicht. update() und redraw() funktionieren auch da nicht. nutze ich pack() beim ScrolledComposite, dann bricht der Composite nicht mehr um, wie ichs definiert habe. (Rowlayout vom Composite)
 
Ich meinten nen layout() auf dem Parent Widget des Labels.

Java:
public static void main(String[] args) {
    Display display = new Display( );
    final Shell shell = new Shell(display);
    shell.setLayout(new FillLayout( ));
    
    Button b = new Button(shell,SWT.NONE);
    b.setText("Add");
    b.addSelectionListener(new SelectionAdapter(){
      public void widgetSelected(SelectionEvent arg0) {
        Label l = new Label(shell,SWT.NONE);
        l.setText("Hi");
        shell.layout( );
      } 
    });
    
    shell.setSize(300, 300);
    shell.open( );

    while (!shell.isDisposed( )) {
      if (!display.readAndDispatch( ))
        display.sleep( );
    }
    display.dispose( );
}
 
ich riesen depp! :)

danke für deine mühe!
hätte ich auch drauf kommen können...

wie meintest das mit dem border vom Composite? kann man den speziell definieren?
 
Die meisten Widgets unterstützen bestimmte Styles.

Das Composite erbt unter anderem Border von Control.

So kann man dann folgendes nutzen:

Java:
Composite borderdComposite = new Composite(shell, SWT.BORDER);
 
Zurück