SWT GridLayout - SWT.LEFT Problem

illuzione

Mitglied
Hallo,

in einem derzeitigen RCP Projekt mit SWT-Elementen hat sich folgendes Problem ereignet.
Erstmal vorweg ein paar Informationen:

Wir erstellen eine RCP Anwendung unter Eclipse 3.3 und verfügen dort über einige Views die auf mehrere Elemente aus org.eclipse.ui.forms.* zugreifen.
Sprich: ScrolledForm, FormToolkit, etc.

Nun habe ich einige Sections erstellt, welche wiederrum eine Composite mit einem Gridlayout beinhalten.
Auf diesem Layout sind verschiedene Labels und Textboxen zu finden.

Mein Problem nun ist: Sobald ich die Section schließe und wieder öffne orientiert sich die Größe bzw. Länge der Elemente um. (Siehe Anhang) Es ist etwas kompliziert zu erklären.

Ich würde nun gerne, dass die Elemente immer im 'normalen' Zustand bleiben, wie ich sie angelegt habe. Liegt es eventuell am SWT.LEFT? Oder sollte ich lieber ein ganz anderes Layout wählen? Bin für jeden Tipp dankbar.

Der Codeausschnitt, passend zum Dateianhang:

Java:
// [...]
        
        final Section sStamm = toolkit.createSection(body, Section.TITLE_BAR | Section.TWISTIE | Section.EXPANDED);
        final GridData gdsStamm = new GridData(SWT.FILL, SWT.FILL, true, false);
        sStamm.setLayoutData(gdsStamm);
        sStamm.setText("Stammdaten");
    
    
        final Composite csStamm = toolkit.createComposite(sStamm, SWT.NONE);
        final GridLayout gridLayout = new GridLayout();
        gridLayout.numColumns = 2;
        csStamm.setLayout(gridLayout);
        toolkit.paintBordersFor(csStamm);
        sStamm.setClient(csStamm);
        form.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    
        // das Label
        toolkit.createLabel(csStamm, "Belegungskunde", SWT.NONE);
        toolkit.adapt(csStamm);
    
        // die Textbox
        control[0] = new Text(csStamm, SWT.BORDER);
        control[0].setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false));        
// [...]

Gruß,
Jens
 
Zuletzt bearbeitet:
Hallo,
Dies ist nicht das Problem von SWT.LEFT. Ich glaube die Breite des Feldes ändert sich mit der Breite des Eintrages. Probiers doch mal so:

Ersetze diese Zeile
control[0].setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false));

mit folgendem Code:
GridData gridData = new GridData();
gridData.verticalAlignment = SWT.LEFT;
gridData.horizontalAlignment = SWT.CENTER;
gridData.widthHint = 50; // Hier wird die minimale Breite der Spalte angegeben, diese sollte dann auch so bleiben
control[0].setLayoutData(gridData);

Vielleicht klappts dann.

Freundliche Grüsse
CKingZesi
 
Zuletzt bearbeitet:
Hallo,
danke für Ihren Eintrag, habe die Funktion mittlerweile auch gefunden.

Gehe nun mit einer For-Schleife durch die Elemente durch und gebe ihnen eine Mindestgröße.

Gruß,
Jens
 
Zurück