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");
}
}
Und so wird mein Mangel an Wissen über diese GUI-Bibliothek offensichtlich ... – Justin