Bonjour à tous!

Maintenant que je commence à maitriser les Layout, je suis tombé sur le problème suivant:

J'ai des contrôles dans un layout.
Je veux masquer un des contrôle.

Solution 1:
Je fais donc un setVisible(false).
Malheureusement le layout n'est pas recalculé, il reste un "trou" à la place de mon contrôle.
question: est ce normal? logique?

Solution 2:
Est ce que je peux enlever mon contrôle du composite?
Par example en lui changeant son parent pour un autre composite non visible que j'aurais ajouté.
Ca marchouille sauf que:
- je trouve ça pas très clean
- je suis obligé redimensionner le tout pour declencher un recalcul de layout
- quand je le remet dans sShell, il se retrouve dernier dans mon layout.

Question : comment peut on choisir l'ordre des fils dans un composite?

Bref comment faire?

Merci

Voici un bout de code ( généré avec Eclipse & VisualEditor)

Solution1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
 
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Shell;
 
public class TestLayout {
 
	private Shell sShell = null;
	private Button button = null;
	private Button button1 = null;
 
	/**
         * This method initializes sShell
         */
	private void createSShell() {
		sShell = new Shell();
		sShell.setText("Shell");
		sShell.setSize(new Point(300, 200));
		sShell.setLayout(new RowLayout());
		button = new Button(sShell, SWT.NONE);
		button.setText("buton");
		button1 = new Button(sShell, SWT.NONE);
		button1.setText("button1");
		button1.addSelectionListener(new SelectionAdapter() {
			public void widgetSelected(SelectionEvent e) {
				button.setVisible(!button.getVisible());
			}
		});
	}
}
Solution2
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
 
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Shell;
 
public class TestLayout {
 
	private Shell sShell = null;
	private Button button = null;
	private Button button1 = null;
	private Composite composite = null;
 
	/**
         * This method initializes sShell
         */
	private void createSShell() {
		sShell = new Shell();
		sShell.setText("Shell");
		sShell.setSize(new Point(300, 200));
		sShell.setLayout(new RowLayout());
		button = new Button(sShell, SWT.NONE);
		button.setText("buton");
		button1 = new Button(sShell, SWT.NONE);
		button1.setText("button1");
		createComposite();
		button1.addSelectionListener(new SelectionAdapter() {
			public void widgetSelected(SelectionEvent e) {
				if (button.getParent() == sShell) {
					button.setParent(composite);
				} else {
					button.setParent(sShell);
				}
			}
		});
	}
 
	/**
         * This method initializes composite
         */
	private void createComposite() {
		composite = new Composite(sShell, SWT.NONE);
		composite.setSize(1, 1);
		composite.setVisible(false);
 
	}
 
}