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] Lancer une fenêtre SWT depuis une autre


Sujet :

SWT/JFace Java

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2003
    Messages : 281
    Points : 209
    Points
    209
    Par défaut [SWT] Lancer une fenêtre SWT depuis une autre
    Bonjour,

    je viens d'installer eclipse avec VE et j'ai fais une 1ère fenêtre (shell).
    J'aimerais pouvoir ouvrir (afficher, créer, générer je ne sais pas...) une autre fenêtre en cliquant sur un bouton de la 1ère fenêtre par exemple.

    Dois créer une autre classe qui contient un autre shell ?
    Dois créer un autre shell dans la même classe ?
    Comment faire l'appel de cette 2e fenêtre, quelle méthode ... ?

    Merci




    (j'ai fais une recherche, mais j'ai pas trouvé de sujet parlant de çà, mais ...)
    S'il n'y a pas de solution, il n'y a pas de problème.
    Moi je dis ça, je dis rien.

  2. #2
    Membre confirmé Avatar de menuge
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    727
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2004
    Messages : 727
    Points : 616
    Points
    616
    Par défaut
    dans le listener de ton bouton, il te suffit de créer un nouveau shell...
    --
    Ludovic

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2003
    Messages : 281
    Points : 209
    Points
    209
    Par défaut
    oui mais je vois pas comment.
    j'ai essayé plusieurs truc dans le genre :

    Shell maFenetre = new Shell()
    ou
    Dialog1 maFenetre = new Dialog1()


    Dialog1 étrant une classe qui est générée via l'edition sous VE d'un shell.

    En gros, j'ai essayé des trucs au pif, mais j'aimerais bien un exemple de code à écrire ; pourtant ca me parraissait tout bête à faire, mais j'y arrive pas...
    S'il n'y a pas de solution, il n'y a pas de problème.
    Moi je dis ça, je dis rien.

  4. #4
    Membre régulier Avatar de Rocket
    Profil pro
    Inscrit en
    Février 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 72
    Points : 82
    Points
    82
    Par défaut
    Eh bien dans ton listener tu crées une nouvelle classe maNouvellePage()

    dans le constructeur tu appelles une fonction init() où tu crées un nouveau shell qui va contenir ton display de ton premier shell.

    Ensuite tu fais un open de ce nouveau shell et bien sur tu ajoutes la boucle while avec le display.readAndDispatch (code que tu dois retoruver un peu partout)

    Et normalement cela fonctionne

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2003
    Messages : 281
    Points : 209
    Points
    209
    Par défaut
    ahh "display.readAndDispatch ", ca me dit qqchose oui, je l'ai déjà vu.

    Je crois que j'ai du mettre un truc du genre dans ma classe qui content mon 2e shell, mais ca devait être le même bout de code que ce qui est généré automatiquement par eclipse (et je ne m'en souviens plus de tête).



    Je vais tester cela ce soir, merci.
    Je tiens au courant.
    S'il n'y a pas de solution, il n'y a pas de problème.
    Moi je dis ça, je dis rien.

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2003
    Messages : 281
    Points : 209
    Points
    209
    Par défaut
    c bon, en fait j'avais fait le boulet, j'avais laisser main comme nom de la méthode au lieu de la renommée pour en faire un constructeur.

    En gros j'ai refait une classe visuel (et cette fois j'ai laissé la génération automatique du main).
    J'ai changé le nom de la méthode main pour quelle est soit le constructeur.
    Remplacé "thisclass" par "this".

    Par contre, il me reste un petit soucis , c'est que les 2 shells ont l'air lié.

    Quand je ferme la 1ere fenetre en premier, ca ce ferme pas la 2e.
    Si je ferme la 2e fenetre en premier, ca me ferme également la 1ere.
    Si j'ai un peu compris quelquechose, c'est que je dois utiliser le même display pour les 2 fenetres... par contre comment régler ca ?

    (je préferais l'inverse )

    En tout cas merci
    S'il n'y a pas de solution, il n'y a pas de problème.
    Moi je dis ça, je dis rien.

  7. #7
    Membre régulier Avatar de Rocket
    Profil pro
    Inscrit en
    Février 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 72
    Points : 82
    Points
    82
    Par défaut
    Je n'ai pas été encore jusque là mais normalement il faut qi tu fais un close le gérer sur ton shell avec un dispose().

    Par contre pour rendre tes fenêtres modal (ne pas saisir la première si la deuxième est ouverte), tu as des paramètres à passer lors de ton new pour le shell (un truc du style APPLICATION.MODAL).

    Bon a vérifier.

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2003
    Messages : 281
    Points : 209
    Points
    209
    Par défaut
    J'ai testé ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     sShell = new Shell(parent, SWT.APPLICATION_MODAL );
    "parent" étant le shell dans lequel se trouve le listner.

    En gros, modal rend la nouvelle fenetre active et désactive les autres.
    Que je mette le parent ou non, cela ne change rien... mes 2 fenêtres se ferment toujours toutes les deux.
    S'il n'y a pas de solution, il n'y a pas de problème.
    Moi je dis ça, je dis rien.

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2003
    Messages : 281
    Points : 209
    Points
    209
    Par défaut
    Est ce que quelqu'un connait la solution à mon problème ?
    S'il n'y a pas de solution, il n'y a pas de problème.
    Moi je dis ça, je dis rien.

  10. #10
    Membre régulier Avatar de Rocket
    Profil pro
    Inscrit en
    Février 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 72
    Points : 82
    Points
    82
    Par défaut
    Salut, je regarderai ce soir, je te tiens au courant.

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2003
    Messages : 281
    Points : 209
    Points
    209
    Par défaut
    en fait je regarder pas mal d'exemple là :
    http://www.eclipse.org/swt/snippets/

    et en fait j'ai réaliser qu'il ne fallait pas lier le "display" mais le "shell" (je comprends pas pourquoi, mais tant que ca marche...)

    donc dans le listener du bouton je fais un simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new SmallDialog(sShell);
    sShell étant mon shell principal et SmallDialog ma classe qui contient ma seconde fenêtre.

    Dans SmallDialog j'ai en gros :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public SmallDialog(Shell parentShell) {
       ...
       sShell = new Shell(parentShell);
       sShell.open();
       ...
    }
    maintenant, ma fenêtre principale se ferme que lorsque je le souhaite.
    Par contre je n'ai pas encore regarder pour le "dispose"
    S'il n'y a pas de solution, il n'y a pas de problème.
    Moi je dis ça, je dis rien.

  12. #12
    Membre régulier Avatar de Rocket
    Profil pro
    Inscrit en
    Février 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 72
    Points : 82
    Points
    82
    Par défaut
    De tout ce que j'ai pu lire, tu as un display par appli, et des shells pour chaque ihm.
    Sur le le close (croix en haut à droite, cela se fait automatiquement fonction close()). Si tu as un bouton fermer et bein dans la récup de l'évent tu fait un close qui lui fait pas mal de vérif sur l'état de ton shell et au final fait un dispose().

    voili voilou

  13. #13
    Membre actif
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2003
    Messages : 281
    Points : 209
    Points
    209
    Par défaut
    Je sais même plus si je créé un nouveau Display (j'ai pas le code sous les yeux), mais surement.

    Pour le close() y a pas de problème. En fait j'avais juste lu qu'il fallait bien faire un dispose de chaque display pour libérer la mémoire. Alors je me disait juste qu'il fallait que j'y pense alors dans mon code je l'avais pas fait, c'est tout . Mais oui en effet, il faut choper tout ça par évenement.

    En tout cas merci.
    S'il n'y a pas de solution, il n'y a pas de problème.
    Moi je dis ça, je dis rien.

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

Discussions similaires

  1. Créer une fenêtre Windows depuis une application console
    Par khayyam90 dans le forum Contribuez
    Réponses: 0
    Dernier message: 28/12/2010, 23h56
  2. Réponses: 0
    Dernier message: 28/12/2010, 19h36
  3. Lancer une application Swing dans une fenêtre SWT
    Par Zlika_ese dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 08/05/2010, 14h17
  4. Fermer fenêtre appelante depuis une fenêtre modale
    Par bobic dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 22/06/2009, 11h56
  5. Réponses: 6
    Dernier message: 12/08/2007, 11h10

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