2016-04-24 8 views
0

Ich habe einen Explorer in meiner RCP-Anwendung, zu der ich eine innere Zusammensetzung mit einem RowLayout hinzugefügt, um verschiedene Kategorie Elemente anzuzeigen. Wenn die Breite des Explorers in der Größe geändert wird, möchte ich, dass die Kategorieelemente in neue Zeilen umbrochen werden und die Größe des übergeordneten Verbunds erweitern.Wie kann SWT Layout Größe ändern (wachsen/verkleinern) basierend auf Inhalt

Wenn ich meinen inneren Verbund mit Standardeinstellungen initialisiere, passiert nichts, nicht einmal das Umwickeln. Wenn ich es auf den vertikalen Raum setze, benötigt es die Hälfte des Raums, während die andere Hälfte für den Baum übrig bleibt, was hässlich ist und nicht das, was gewünscht wird. Wenn ich Hinweise setze, wickle ich zwar um, aber die Größe seines Verbunds ändert sich nie und versteckt somit die nächsten Zeilen. Ich habe versucht, einen Größenanpassungs-Event-Listener hinzuzufügen und die Größe meines inneren Composits zu ändern. Das erlaubt mir, die Größe zu ändern und alle Zeilen anzuzeigen, aber es deckt dann einen Teil des Baums ab und versteckt ihn. Ich habe versucht, einen setLocation und setSize für den Baum selbst zu bewegen/Größe entsprechend zu ändern, aber ohne Erfolg, es ändert sich nicht.

Wie kann dies gemacht werden, um zu arbeiten. Was vermisse ich. Gibt es nicht eine einfache Möglichkeit, nach einem Layout zu fragen, das die erforderliche Mindesthöhe verwendet und nicht mehr, sondern bei Bedarf anpassen kann?

Danke für Ihre Hilfe.

Hier ist der Code:

innerComposite = new Composite(parent, SWT.NONE); 
    innerComposite.addListener(SWT.Resize, listenerComp); 
    GridDataFactory.fillDefaults().hint(10, 30).applyTo(innerComposite); 
    GridLayoutFactory.fillDefaults().applyTo(innerComposite); 

Listener listenerComp = new Listener() { 
    public void handleEvent(Event event) { 
    Widget widget = event.widget; 
    Composite comp = (Composite)widget; 
    Composite parent = comp.getParent(); 
    Point parentSize = parent.getSize(); 
    Point size = comp.computeSize(parentSize.x, SWT.DEFAULT); 
    comp.setSize(size); 
    } 
} 

Und hier ist ein Bild:

enter image description here

Und nach Größe ändern (zu bemerken, dass die erste Zeile des Baumes bedeckt ist):

enter image description here

+0

Es würde helfen, wenn Sie einen [MCVE] posten könnte (http://stackoverflow.com/help/ mcve) das zeigt das Problem – Baz

Antwort

0

Wann Sie verwenden Layouts aufrufen setSize (oder setBounds) wird das Layout, das eingerichtet wurde, versauen.

Stattdessen sollten Sie rufen layout(true) (oder sogar layout(true, true) auf dem Composite, die sowohl den Baum und Ihre innerComposite besitzt.

+0

Ich habe versucht, aber ohne Erfolg.Im Moment versuche ich entweder den Hinweis für die Höhe oder die minimale Höhe im Größenanpassungs-Listener zu setzen und dann das Layout wie vorgeschlagen aufzurufen, aber nichts passiert das richtig und am richtigen ort? –