2016-06-16 16 views
0

Ich mache ein Eigenschaftsblatt über org.eclipse.ui.views.properties.tabbed, und ich habe einen Abschnitt, wo ich die Felder im Eigenschaftenbereich basierend auf dem Element dynamisch generieren muss, das ausgewählt ist. Das Problem ist, dass ich das ausgewählte Element vor createControls nicht kenne, und ich kann es nicht ändern, so dass ich es weiß. Wie kann ich dem Verbund dynamisch Felder hinzufügen?Wie füge ich mehr Steuerelemente nach createPartControl hinzu?

Ich verwende das WindowBuilder-Tool, um leichter andere Teile des Formulars zu erstellen, obwohl ich es nicht verwenden muss. Hier

ist ein Beispiel dafür, was ich versuche zu tun:

Form.java

import org.eclipse.swt.SWT; 
import org.eclipse.swt.events.DisposeEvent; 
import org.eclipse.swt.events.DisposeListener; 
import org.eclipse.swt.widgets.Composite; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.ui.forms.widgets.FormToolkit; 
import org.eclipse.swt.layout.GridLayout; 
import org.eclipse.swt.widgets.Label; 
import org.eclipse.swt.widgets.Text; 
import org.eclipse.swt.layout.GridData; 

public class Form extends Composite { 

    private final FormToolkit toolkit = new FormToolkit(Display.getCurrent()); 
    private Text text; 

    /** 
    * Create the composite. 
    * @param parent 
    * @param style 
    */ 
    public Form(Composite parent, int style) { 
     super(parent, style); 
     addDisposeListener(new DisposeListener() { 
      public void widgetDisposed(DisposeEvent e) { 
       toolkit.dispose(); 
      } 
     }); 
     toolkit.adapt(this); 
     toolkit.paintBordersFor(this); 
     setLayout(new GridLayout(2, false)); 

     Label lblNewLabel = new Label(this, SWT.NONE); 
     lblNewLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); 
     toolkit.adapt(lblNewLabel, true, true); 
     lblNewLabel.setText("New Label"); 

     text = new Text(this, SWT.BORDER); 
     text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); 
     toolkit.adapt(text, true, true); 

    } 

    public void addDataToForm(String label) { 
     Label lblNewLabel = new Label(this, SWT.NONE); 
     lblNewLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); 
     toolkit.adapt(lblNewLabel, true, true); 
     lblNewLabel.setText(label); 

     // Don't just want to add Texts; sometimes a checkbox, sometimes something else entirely 
     Text text = new Text(this, SWT.BORDER); 
     text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); 
     toolkit.adapt(text, true, true); 
    } 
} 

PropertySection.java

import org.eclipse.swt.SWT; 
import org.eclipse.swt.layout.FormAttachment; 
import org.eclipse.swt.layout.FormData; 
import org.eclipse.swt.widgets.Composite; 
import org.eclipse.ui.views.properties.tabbed.AbstractPropertySection; 
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage; 
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory; 

public class PropertySection extends AbstractPropertySection { 
    private Form form; 

    @Override 
    public void createControls(Composite parent, TabbedPropertySheetPage aTabbedPropertySheetPage) { 
     super.createControls(parent, aTabbedPropertySheetPage); 

     TabbedPropertySheetWidgetFactory factory = getWidgetFactory(); 
     Composite composite = factory.createFlatFormComposite(parent); 

     form = new Form(composite, SWT.NONE); 
     FormData data = new FormData(); 
     data.left = new FormAttachment(0); 
     data.right = new FormAttachment(100); 
     form.setLayoutData(data); 
    } 

    @Override 
    public void refresh() { 
     // This is where I am able to obtain the info I need to add the elements to the form 
     // This doesn't work: 
     form.addDataToForm("My Label"); 
    } 
} 

Antwort

2

Anruf layout(true, true) in addDataToForm um die Composite zu bekommen, um es zu wiederholen s Layout unter Berücksichtigung der neuen Inhalte.

+0

Und so wird mein Mangel an Wissen über diese GUI-Bibliothek offensichtlich ... – Justin