comment ajouter dynamiquement des widgets swt pour un composite?

Je suis en train d'ajouter des widgets comme les zones de texte, des boutons pour un composite sur le clic d'un bouton.
J'ai essayé , mais j'ai seulement pu ajouter ces widgets dynamiquement seulement jusqu'à la taille de l'échantillon composite. Mon jface dialogue est telle que, il dispose d'un défilé en composite dans lequel il est titulaire d'un composite. Dans le composé principal, j'ai 3 autres composites où je dois obtenir ce
la fonctionnalité, donc si je ajouter des widgets dynamiques d'un composite, il pourrait s'étendre, mais il ne doit pas se superposer existant composites à elle, mais qu'elle doit régler d'autres composites en conséquence et aussi je devrais être en mesure de disposer les widgets sur un clic de bouton. Avez-vous un essayer cette dynamique ajout et la suppression des widgets avant, je suis nouveau sur swt, jface . Ainsi, pouvait-on partager leur expérience ici, je poste le code que j'ai essayé.

import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
public class DynamicDialog extends Dialog {
private Text text;
private Text text_1;
private Composite composite;
/**
* Create the dialog.
* @param parentShell
*/
public DynamicDialog(Shell parentShell) {
super(parentShell);
}
/**
* Create contents of the dialog.
* @param parent
*/
@Override
protected Control createDialogArea(Composite parent) {
Composite container = (Composite) super.createDialogArea(parent);
container.setLayout(new FillLayout(SWT.HORIZONTAL));
ScrolledComposite scrolledComposite = new ScrolledComposite(container, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
scrolledComposite.setExpandHorizontal(true);
scrolledComposite.setExpandVertical(true);
composite = new Composite(scrolledComposite, SWT.NONE);
composite.setLayout(new FormLayout());
scrolledComposite.setContent(composite);
scrolledComposite.setMinSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
final Composite composite_1 = new Composite(composite, SWT.NONE);
composite_1.setLayout(new GridLayout(4, false));
final FormData fd_composite_1 = new FormData();
fd_composite_1.top = new FormAttachment(0);
fd_composite_1.left = new FormAttachment(0, 10);
fd_composite_1.bottom = new FormAttachment(0, 85);
fd_composite_1.right = new FormAttachment(0, 430);
composite_1.setLayoutData(fd_composite_1);
Label label = new Label(composite_1, SWT.NONE);
label.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
label.setText("1");
text_1 = new Text(composite_1, SWT.BORDER);
text_1.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
text = new Text(composite_1, SWT.BORDER);
text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
Button btnDelete = new Button(composite_1, SWT.NONE);
btnDelete.setText("delete");
final Composite composite_2 = new Composite(composite, SWT.NONE);
composite_2.setLayout(new GridLayout(2, false));
final FormData fd_composite_2 = new FormData();
fd_composite_2.bottom = new FormAttachment(100, -91);
fd_composite_2.top = new FormAttachment(0, 91);
fd_composite_2.right = new FormAttachment(100, -10);
fd_composite_2.left = new FormAttachment(100, -74);
composite_2.setLayoutData(fd_composite_2);
new Label(composite_2, SWT.NONE);
Button btnAdd = new Button(composite_2, SWT.NONE);
btnAdd.setText("ADD");
btnAdd.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
Label label2 = new Label(composite_1, SWT.NONE);
label2.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
label2.setText("1");
Text text_12 = new Text(composite_1, SWT.BORDER);
text_12.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
Text text13 = new Text(composite_1, SWT.BORDER);
text13.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
Button btnDelete = new Button(composite_1, SWT.NONE);
btnDelete.setText("delete");
//Point p0 = composite_1.getSize();
//composite_1.setSize(SWT.DEFAULT,SWT.DEFAULT);
composite_1.layout();
//Point p = composite.getSize();
//composite.setSize(SWT.DEFAULT,SWT.DEFAULT);
//composite.setSize(p);
//composite.layout();
}
});
return container;
}
/**
* Create contents of the button bar.
* @param parent
*/
@Override
protected void createButtonsForButtonBar(Composite parent) {
createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL,
true);
createButton(parent, IDialogConstants.CANCEL_ID,
IDialogConstants.CANCEL_LABEL, false);
}
/**
* Return the initial size of the dialog.
*/
@Override
protected Point getInitialSize() {
return new Point(450, 300);
}
public static void main(String[] args){
Display display = new Display();
Shell shell =  new Shell(display);
shell.setLayout(new FillLayout());
DynamicDialog dd = new DynamicDialog(shell);
dd.open();
}
}
  • Je vais préféré celui-ci, comme j'ai une question très semblable à moi stackoverflow.com/questions/20204381/...
  • Ouais, c'est de me hanter depuis la semaine dernière, je suis en train de différentes manières, mais ne pouvait pas obtenir le meilleur à venir. Donc, j'essaie juste de savoir si quelqu'un pouvait aider notre cause. Merci!
  • J'ai trouvé un exemple sur internet, qui est un peu similaire à notre problème, ScrolledComposite Exemple essayez ceci. Ici, lorsque j'ai jamais ajouter différents composites, il fonctionne très bien dans cet exemple de code, mais quand j'écris un code distinct, il n'est pas de travail. Un de plus intéressant, c'est, c'est la création tout sur un shell, swt dans le défilé composite exemple, alors que je suis en utilisant jface boîte de dialogue. Est ce que cela a un effet sur ce que nous faisons?
  • ScrolledComposites sont généralement une douleur. Vous devez faire attention à ce que vous êtes d'emballage avec le défilé comp. MAIS, si vous jouez assez longtemps avec elle, vous arriverez à la conclusion que vous pouvez réellement utiliser un ScrolledComposite à l'intérieur d'un Dialog, et faire défiler trop.
InformationsquelleAutor Juseeth | 2013-11-25