IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SWT/JFace Java Discussion :

[RowLayout] Superposition des composants


Sujet :

SWT/JFace Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Julien Bodin
    Homme Profil pro
    Devops
    Inscrit en
    Février 2009
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Devops
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 474
    Par défaut [RowLayout] Superposition des composants
    Bonjour à tous !

    Je suis en train de développer une petite application et j'utilise SWT.
    J'ai un ScrolledComposite sur ma fenêtre sur lequel j'ajoute dynamiquement de nouveaux boutons radios.
    J'ai mis un RowLayout sur ce ScrolledComposite mais chaque nouveau bouton se place derrière l'ancien au lieu de se placer sur la même ligne (je le sais car je peux supprimer le bouton radio sélectionné, et les derniers ajoutés apparaissent en dessous).

    Je n'utilise pas de texte mais des images pour ces boutons radios (je ne pense pas que celà soit en cause mais je préfère préciser, on ne sait jamais).

    Voilà le code qui définit mon ScrolledComposite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    scTiles = new ScrolledComposite(gStaticTiles, SWT.V_SCROLL | SWT.BORDER);
    RowLayout scrolledComposite2Layout = new RowLayout(SWT.VERTICAL);
    scrolledComposite2Layout.wrap = true;
    scrolledComposite2Layout.justify = false;
    scrolledComposite2Layout.pack = false;
    scrolledComposite2Layout.marginLeft = 40;
    scTiles.setLayout(scrolledComposite2Layout);
    scTiles.setBounds(10, 20, 114, 204);
    et voici mon code qui gère l'ajout dynamique de bouton :

    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
    53
     
    //Ajout d'une tuile
    btAdd.addSelectionListener(new SelectionAdapter() {
    	public void widgetSelected(SelectionEvent evt) {
    	//System.out.println("btAdd.widgetSelected, event="+evt);
     
    	//Tile contiendra un path vers un fichier .png
    	Tile newTile = new Tile();
     
    	FileDialog dlgFile = new FileDialog(shell, SWT.MULTI);
    	dlgFile.setFilterExtensions(new String[] {"*.png", "*.PNG"});
     
    	//Reconstitution des path + filenames en cas de multisélection
    	String file = dlgFile.open();
    	if(file != null){
    		String[] selected = dlgFile.getFileNames();
    		String[] filenames = new String[selected.length];
    		for (int i = 0; i < selected.length; i++) {
    			String tmp = dlgFile.getFilterPath();
     
    			if(tmp.charAt(tmp.length() - 1)!= File.separatorChar){
    				tmp += String.valueOf(File.separatorChar);
    			}
     
    			tmp += selected[i];
     
    		        filenames[i] = tmp;											
    		}
     
    		newTile.setFilenames(filenames);
     
    		tiles.add(newTile);
     
    		//Création d'un bouton dynamique permettant de sélectionner la tuile
    		Button newbtTile = new Button(scTiles, SWT.RADIO);
     
    		newbtTile.setSize(33, 16);
    		newbtTile.setData(newTile);
    		try {
    			newbtTile.setImage(new Image(display, new FileInputStream(new File(newTile.getFilenames()[0]))));
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		}
     
    		newbtTile.addSelectionListener(new SelectionAdapter() {
    			public void widgetSelected(SelectionEvent evt) {
    			//Pour garder une trace du bouton sélectionné
    				selectedTile = (Control) evt.getSource();
    			}											
    		});									
    	}
    }
    });
    Merci d'avance pour votre aide

  2. #2
    Membre Expert
    Avatar de X-plode
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2005
    Messages
    682
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2005
    Messages : 682
    Par défaut
    Bonsoir,

    Je pense que ton soucis viendrait du RowLayout.

    Personnellement, je pencherais pour un FlowLayout.

    Je te donne un Lien pour les divers informations sur ce layout.

  3. #3
    Membre éclairé Avatar de Julien Bodin
    Homme Profil pro
    Devops
    Inscrit en
    Février 2009
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Devops
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 474
    Par défaut
    Il n'existe pas, à ma connaissance, de FlowLayout avec SWT.

    En fait j'ai le même problème quel que soit le Layout choisi

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2006
    Messages
    218
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Août 2006
    Messages : 218
    Par défaut
    Bonjour,

    Voici un petit exemple à adapter pour t'aider

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
     
    import org.eclipse.swt.SWT;
    import org.eclipse.swt.custom.ScrolledComposite;
    import org.eclipse.swt.events.ControlAdapter;
    import org.eclipse.swt.events.ControlEvent;
    import org.eclipse.swt.graphics.Point;
    import org.eclipse.swt.layout.GridData;
    import org.eclipse.swt.layout.GridLayout;
    import org.eclipse.swt.widgets.Button;
    import org.eclipse.swt.widgets.Composite;
    import org.eclipse.swt.widgets.Display;
    import org.eclipse.swt.widgets.Event;
    import org.eclipse.swt.widgets.Label;
    import org.eclipse.swt.widgets.Listener;
    import org.eclipse.swt.widgets.Shell;
    import org.eclipse.swt.widgets.Text;
     
    /**
     * 
     */
     
    /**
     * Description
     * 
     * @author Laurent CARON
     * @since 25 mars 2009
     * @version 1.0
     * 
     * Modifications : 25 mars 2009 par Laurent CARON : création
     * 
     */
    public class SashExample {
     
        /**
         * @param args
         */
        public static void main(String[] args) {
            final Display display = new Display();
            final Shell shell = new Shell(display);
     
            shell.setLayout(new GridLayout(1, false));
     
            // Section scrolledcomposite
            final ScrolledComposite sc = new ScrolledComposite(shell, SWT.V_SCROLL | SWT.H_SCROLL | SWT.BORDER);
            sc.setExpandHorizontal(true);
            sc.setExpandVertical(true);
            sc.setMinSize(0, 0);
            sc.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, true));
     
            final Composite composite = new Composite(sc, SWT.NONE);
            composite.setLayout(new GridLayout(1, true));
     
            GridLayout layout = new GridLayout();
            layout.verticalSpacing = 15;
            layout.numColumns = 1;
            layout.marginTop = 10;
            layout.horizontalSpacing = 200;
            composite.setLayout(layout);
     
            composite.addControlListener(new ControlAdapter() {
     
                public void controlResized(ControlEvent e) {
                    Point s = composite.computeSize(SWT.DEFAULT, SWT.DEFAULT);
                    sc.setMinSize(s);
                }
     
            });
            sc.setContent(composite);
            Point s = composite.computeSize(SWT.DEFAULT, SWT.DEFAULT);
            sc.setMinSize(s);
     
            // Fin section Scrolled Composite
     
            Button ajout = new Button(shell, SWT.PUSH);
            ajout.setText("Ajouter une radio :)");
     
            ajout.addListener(SWT.Selection, new Listener() {
     
                @Override
                public void handleEvent(Event arg0) {
                    Button radio = new Button(composite, SWT.RADIO);
                    radio.setText("Radio");
                    composite.layout();
                    Point s = composite.computeSize(SWT.DEFAULT, SWT.DEFAULT);
                    sc.setMinSize(s);
                }
            });
     
            shell.setSize(800, 600);
            shell.open();
            while (!shell.isDisposed()) {
                if (!display.readAndDispatch())
                    display.sleep();
            }
            display.dispose();
     
        }
     
    }
    Laurent

  5. #5
    Membre éclairé Avatar de Julien Bodin
    Homme Profil pro
    Devops
    Inscrit en
    Février 2009
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Devops
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 474
    Par défaut
    Merci pour ton code meddle. Je suis en train de l'étudier et je me pose plusieurs questions :

    Tu crées un Composite à l'intérieur de ton ScrolledComposite. Est-ce nécessaire ? Le ScrolledComposite n'est-il pas justement à la base un Composite avec en plus la particularité d'être scrollable ?

    Sinon, j'ai vu que tu faisais régulièrement appel à ce morceau de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Point s = composite.computeSize(SWT.DEFAULT, SWT.DEFAULT);
                    sc.setMinSize(s);
    J'ai adapté ton code à mon application, mais plus rien ne s'affiche. Et je ne comprend pas pourquoi vu que ton application fonctionne très bien, et que la mienne n'est pas spécialement plus compliquée...

    Je reposte le code adapté :

    ScrolledComposite
    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
     
    scTiles = new ScrolledComposite(gStaticTiles, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
    scTiles.setExpandVertical(true);
    scTiles.setExpandHorizontal(true);
    scTiles.setMinSize(0, 0);
    scTiles.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, true));
     
    cmpTiles = new Composite(scTiles, SWT.NONE);
    GridLayout cmpTilesLayout = new GridLayout();
    cmpTilesLayout.horizontalSpacing = 45;
    cmpTilesLayout.verticalSpacing = 30;
    cmpTilesLayout.numColumns = 3;
    cmpTiles.setLayout(cmpTilesLayout);
     
    cmpTiles.addControlListener(new ControlAdapter(){
    	public void controlResized(ControlEvent evt){
    		Point s = cmpTiles.computeSize(SWT.DEFAULT, SWT.DEFAULT);
    		scTiles.setMinSize(s);
    	}										
    });								
     
    	scTiles.setContent(cmpTiles);
     
    Point s = cmpTiles.computeSize(SWT.DEFAULT, SWT.DEFAULT);
    scTiles.setMinSize(s);
    Et le code d'ajout d'un bouton (un peu épuré) :

    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
     
    btAdd.addSelectionListener(new SelectionAdapter() {
    public void widgetSelected(SelectionEvent evt) {
    	//Création d'un bouton dynamique permettant de sélectionner la tuile
    	Button newbtTile = new Button(cmpTiles, SWT.RADIO);
     
    	try {
    		newbtTile.setImage(new Image(display, new FileInputStream(new File(newTile.getPaths()[0]))));
    	} catch (FileNotFoundException e) {
    		e.printStackTrace();
    	}
     
    	cmpTiles.layout();
    	Point s = cmpTiles.computeSize(SWT.DEFAULT, SWT.DEFAULT);
           scTiles.setMinSize(s);
     
    }

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2006
    Messages
    218
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Août 2006
    Messages : 218
    Par défaut
    Bonjour,

    Voici mes réponses :

    >Tu crées un Composite à l'intérieur de ton ScrolledComposite. Est-ce >nécessaire ? Le ScrolledComposite n'est-il pas justement à la base un >Composite avec en plus la particularité d'être scrollable ?

    Oui et non, le ScrolledComposite est une coquille vide dans laquelle on met un composite qui sera scrollé, d'où le sc.setContent(composite) qui est obligatoire.

    Ensuite, pour t'aider tu peux poster tout le code de la classe que je regarde ?

    Laurent

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [BorderLayout] superposition des composants.
    Par vasilov dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 08/07/2005, 11h51
  2. [MFC] acces a des composants
    Par abignon dans le forum MFC
    Réponses: 7
    Dernier message: 26/03/2004, 11h58
  3. [Kylix] Trouver des composants pour Kylix 3
    Par busy999 dans le forum EDI
    Réponses: 2
    Dernier message: 17/02/2003, 14h01
  4. Réponses: 1
    Dernier message: 26/01/2003, 15h13
  5. Réponses: 1
    Dernier message: 02/01/2003, 12h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo