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 :

[SWT] Problèmes de composites


Sujet :

SWT/JFace Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 171
    Par défaut [SWT] Problèmes de composites
    Bonsoir,

    J'ai commencé le JAVA il y a peu et je fais la ma première application avec interface graphique.

    J'aimerais donc au clic sur un bouton de mon menu, afficher les nouveaux objets créer dans le Composite principal. J'ai essayé un peu de tout comme les méthodes pack, dispose, update, .. mais pas de résultat.

    Dans ma fenêtre j'ai mon menu en haut et de dessous le Composite avec le contenu. J'arrive a créer un évènement sur les bouton mais je n'arrive pas a placé les objets sur le Composite et en supprimant donc l'ancien contenu du Composite.

    Une solution ? Ou peut-être une autre manière de faire ?
    Merci.

  2. #2
    Membre chevronné Avatar de desert
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 414
    Par défaut
    De quelle manière procèdes-tu ? Pourrais-tu fournir un peu de code pour que l'on puisse voir ce qui cloche ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 171
    Par défaut
    Bonjour et merci d'avoir répondu.

    Donc j'ai ma page principale index.java crée l'Objet display et la fenêtre ainsi que la connexion à la bdd Access. Dans cette même page j'introduit la classe menu que j'ai définie pour le menu.

    Ensuite j'ai créer un évènement sur les éléments du menu et selon l'élément j'exécute une autre classe comme par exemple ma classe ajoutArticle :
    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
     
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
     
    import org.eclipse.swt.SWT;
    import org.eclipse.swt.events.SelectionAdapter;
    import org.eclipse.swt.events.SelectionEvent;
    import org.eclipse.swt.layout.GridLayout;
    import org.eclipse.swt.widgets.*;
     
    public class ajoutArticle {
     
    	private static void affiche(final String message) {
    		System.out.println(message);
    	}
    	private static void arret(final String message) {
    		System.err.println(message);
    		System.exit(99);
    	}
     
    	public ajoutArticle (final Shell shell) {
     
    		composite = new Composite(shell)
     
    		final GridLayout gridLayout = new GridLayout();
    		gridLayout.numColumns = 2;
    	    shellAjoutArticle.setLayout(gridLayout);
     
    	    final Label designation = new Label(composite, SWT.NONE);
    	    designation.setText("Désignation :");
    	    final Text designationText = new Text(composite, SWT.BORDER);
     
    	    final Label numSerie = new Label(composite, SWT.NONE);
    	    numSerie.setText("Numéro de série :");
    	    final Text numSerieText = new Text(composite, SWT.BORDER);
    	    numSerieText.setSize(300,25);
     
    	    final Label quantite = new Label(composite, SWT.NONE);
    	    quantite.setText("Quantité :");
    	    final Text quantiteText = new Text(composite, SWT.BORDER);
    	    quantiteText.setSize(300,25);
     
    	    final Button ajouter = new Button(composite, SWT.CENTER);
    	    ajouter.setText("Ajouter");
    	    ajouter.addSelectionListener(new SelectionAdapter() {
    	        public void widgetSelected(final SelectionEvent arg0) {
    	    		ResultSet résultats = null;
    	    		String requete = "";
    	    		if (designationText.getText()!="" && numSerieText.getText()!="" && quantiteText.getText()!="") {
    		    		//creation et execution de la requete
    		    		requete = "INSERT INTO articles VALUES ('', "+designationText.getText()+", "+numSerieText.getText()+", "+quantiteText.getText()+", '1')";
    		    		try {
    		    			final Statement stmt = con.createStatement();
    		    			résultats = stmt.executeQuery(requete);
    		    		} catch (final SQLException e) {
    		    			arret("Anomalie lors de l'execution de la requête");
    		    		}
    		        	// Ici je lance une classe pour réafficher la liste des articles
    	    		} else {
    	    			final Label erreur = new Label(composite, SWT.NONE);
    	    		    erreur.setText("Un des champs est incomplet !");
    	    		}
    	        }
    	    });
     
    	    final Button annuler = new Button(composite, SWT.CENTER);
    	    annuler.setText("Annuler");
    	    annuler.addSelectionListener(new SelectionAdapter() {
    	        public void widgetSelected(final SelectionEvent arg0) {
    	            // Ici je lance une classe pour réafficher la liste des articles
    	          }
    	        });
     
    	        composite.update();
    		designationText.setSize(200,20);
    		numSerieText.setSize(200,20);
    		quantiteText.setSize(200,20);
     
    	}
     
    }
    Merci pour votre aide.

  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,

    J'ai repéré quelques erreurs :
    1/ Tu appliques setSize() alors que ton composite possède un layout(GridLayout), donc le setSize ne sert à rien. Il faut utiliser un objet GridData :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    final Text numSerieText = new Text(composite, SWT.BORDER);
    GridData gd = new GridData(GridData.FILL_BOTH);
    gd.widthHint=300;
    gd.heightHint=25;
    numSerieText.setLayoutData(gd);
    2/ Avec ta méthode, tu ajoutes des composites au fur et à mesure dans la fenêtre... C'est ce que tu veux ?

    3/ En SWT, une fois qu'on a ajouté des éléments dans un composite, il faut appeler la méthode layout() sur ce composite.

    Voici un petit exemple :

    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
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
     
    package test;
     
    import org.eclipse.swt.SWT;
    import org.eclipse.swt.layout.FillLayout;
    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.Control;
    import org.eclipse.swt.widgets.Display;
    import org.eclipse.swt.widgets.Event;
    import org.eclipse.swt.widgets.Group;
    import org.eclipse.swt.widgets.Label;
    import org.eclipse.swt.widgets.Listener;
    import org.eclipse.swt.widgets.Shell;
    import org.eclipse.swt.widgets.Text;
     
    public class Demo {
     
        /**
         * @param args
         */
        public static void main(String[] args) {
            final Display display = new Display();
            // Fait la fenêtre
            Shell shell = new Shell(display);
            shell.setBounds(10, 10, 300, 300);
            shell.setLayout(new GridLayout(2, false));
     
            // Créé un bouton
            Button bouton = new Button(shell, SWT.PUSH);
            bouton.setText("Fait des trucs");
            bouton.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, false));
     
            // Créé un autre bouton
            Button bouton2 = new Button(shell, SWT.PUSH);
            bouton2.setText("Fait d'autres trucs");
            bouton2.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, false));
     
            // Comp est déclaré en final car sinon on ne peut pas les utiliser dans les classes anonymes
            // On aurait pu le déclarer en champ de la classe
            final Composite comp = new Composite(shell, SWT.BORDER);
            comp.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, true, 2, 1));
            comp.setBackground(display.getSystemColor(SWT.COLOR_WHITE));
            comp.setLayout(new GridLayout(2, false));
     
            // Actions quand on clique sur un bouton
            bouton.addListener(SWT.Selection, new Listener() {
     
                @Override
                public void handleEvent(Event e) {
                    faitDesTrucs(comp);
                }
            });
     
            bouton2.addListener(SWT.Selection, new Listener() {
     
                @Override
                public void handleEvent(Event e) {
                    faitDAutresTrucs(comp);
                }
            });
     
            shell.open();
            while (!shell.isDisposed()) {
                if (!display.readAndDispatch())
                    display.sleep();
            }
            display.dispose();
     
        }
     
        /**
         * @param comp
         */
        protected static void faitDAutresTrucs(Composite comp) {
            // D'abord on nettoie le composite de tous les éléments déjà présents
            nettoie(comp);
     
            // Puis on ajoute des widgets
            final Label designation = new Label(comp, SWT.NONE);
            designation.setText("Désignation :");
            final Text designationText = new Text(comp, SWT.BORDER);
     
            final Label numSerie = new Label(comp, SWT.NONE);
            numSerie.setText("Numéro de série :");
            final Text numSerieText = new Text(comp, SWT.BORDER);
            GridData gd = new GridData(GridData.FILL_BOTH);
            gd.widthHint = 300;
            gd.heightHint = 25;
            numSerieText.setLayoutData(gd);
     
            final Label quantite = new Label(comp, SWT.NONE);
            quantite.setText("Quantité :");
            final Text quantiteText = new Text(comp, SWT.BORDER);
            quantiteText.setSize(300, 25);
     
            // Maintenant grâce à layout, on redessine le composite
            comp.layout();
     
        }
     
        /**
         * @param comp
         */
        protected static void faitDesTrucs(Composite comp) {
            nettoie(comp);
            Group grp = new Group(comp, SWT.NONE);
            grp.setText("Coucou");
            grp.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, true));
            grp.setLayout(new FillLayout());
     
            Button bouton = new Button(grp, SWT.PUSH);
            bouton.setText("Hop là");
     
            comp.layout();
        }
     
        /**
         * @param comp
         */
        private static void nettoie(Composite comp) {
            if (comp == null || comp.isDisposed()) {
                return;
            }
     
            for (Control current : comp.getChildren()) {
                if (!current.isDisposed()) {
                    current.dispose();
                }
            }
        }
     
    }
    J'espère t'avoir aidé,

    Laurent

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 171
    Par défaut
    Nickel merci, c'est parfait je pense avoir mieux compris comment tout ça fonctionne
    Bonne soirée

  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
    Citation Envoyé par Klimium Voir le message
    Nickel merci, c'est parfait je pense avoir mieux compris comment tout ça fonctionne
    Bonne soirée
    Bonne nouvelle

    N'oublie de mettre le sujet en résolu !

    Bonne nuit

    Laurent

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

Discussions similaires

  1. [SWT] Problème de GridLayout
    Par otsgd dans le forum SWT/JFace
    Réponses: 3
    Dernier message: 06/06/2006, 14h37
  2. [dll SWT] Problème avec SWT et Eclipse 3.1.1
    Par guizmo_ dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 18/11/2005, 01h02
  3. [Java 2D] problème de composition d'images
    Par wwave dans le forum 2D
    Réponses: 4
    Dernier message: 11/07/2005, 12h28
  4. [SWT] Problème avec la transparence des PNG
    Par sirjuh dans le forum SWT/JFace
    Réponses: 1
    Dernier message: 02/08/2004, 08h07
  5. [SWT] Problème de paramètre GridData
    Par yolepro dans le forum SWT/JFace
    Réponses: 4
    Dernier message: 06/12/2002, 10h37

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