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

AWT/Swing Java Discussion :

Créer des boutons avec modalResult


Sujet :

AWT/Swing Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Process Expert - Document Management
    Inscrit en
    Novembre 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Process Expert - Document Management
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Créer des boutons avec modalResult
    Bonjour à tous,

    Peut-être déja abordé, mais non retrouvé dans le forum... mon 2° post donc milles excuses pour l'usage de la recherche

    Je débute en Java pour mon projet de fin d'année. Il s'agit d'une application graphique type "distributeur de billets".

    Par mon background Delphi et C# j'ai l'habitude d'utiliser des fenêtres modales avec un résultat modal.

    J'ai bien trouvé comment dériver un JDialog pour retourner un résultat.

    JModalDialog, en gros :
    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
     
    public class JModalDialog extends javax.swing.JDialog {
        private int modalResult = ModalResult.mrNone;
    ...
        private int getModalResult() {
            return modalResult;
        }
     
        protected void setModalResult(int i) {
            this.modalResult = i;
            this.setVisible(false);
        }
    ...
        public int showModal()
        {
            this.setSize(new Dimension(648, 510));
            this.setLocationRelativeTo(null);
            this.setVisible(true);
            return this.getModalResult();
        }
    Constantes "modales" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        public static final int mrNone     = 0;
        public static final int mrOk       = 2^0;
        public static final int mrCancel   = 2^1;
        public static final int mrAbort    = 2^2;
        public static final int mrRetry    = 2^3;
        public static final int mrIgnore   = 2^4;
        public static final int mrYes      = 2^5;
        public static final int mrNo       = 2^6;
        public static final int mrAll      = 2^7;
        public static final int mrNoToAll  = 2^8;
        public static final int mrYesToAll = 2^9;
    Et j'utilise le tout ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        dlgTest dlg = new dlgTest();
        if (dlg.showModal()==Tools.mrOk)
            myLogger.write("Réussi !");
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
            this.setModalResult(ModalResult.mrOk);
        }
    Jusque là tout va bien... maintenant mon problème est que, dans l'optique de "copier" le principe de boutons/fenêtres avec valeur modale...

    1) Créer des boutons type JModalButton qui appelent automatiquement le setModalResult de leur JDialog mère

    2) Idéalement proposer une propriété modalResult pour le bouton (cette valeur étant la valeur passée au JDialog)

    3) Ajouter enfin ce composant à la palette de NetBeans, et donc accéder à la propriété modalResult dans l'éditeur de GUI

    4) le point bonus, comment rendre une constante globale? CAD sans utiliser ModalResult.mrOK mais juste mrOK, j'ai cru comprendre qu'il fallait faire un implements d'une classe abstraite ou ce genre ?

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Points : 635
    Points
    635
    Par défaut
    Tu es en train de recoder JOptionPane j'ai l'impression !
    Pour ta dernière question, définis les constantes dans une interface et fais implémenter cette interfaces par les classes qui utilisent les constantes. Tu peux aussi utiliser les imports statiques à partir de Java 5.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Process Expert - Document Management
    Inscrit en
    Novembre 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Process Expert - Document Management
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    J'ai en effet bien vu JOptionPane, mais cela apporte-t-il assez de flexibilité niveau GUI? Chaque écran de mon projet dérive de JModalDialog.

    Voir ci joints des exemples d'écrans de l'appli, serait-il possible d'adapter sans trop de difficulté?

    En fait je préfère gèrer tout ce qui est GUI via le GUI builder de netbeans, et donc sans créer tout au vol. De plus on peut imaginer que d'autres éléments de l'écran déclenchent les "modal Result"


    En ce qui concerne les constantes je vais y regarder
    Images attachées Images attachées   

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Points : 635
    Points
    635
    Par défaut
    Le mieux dans ce genre de cas est de faire un JPanel (par exemple avec l'éditeur de Netbeans). Ensuite tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    JPanel panel = new MonPanel();
    int option = JOptionPane.showConfirmDialog(
                        this, // le composant parent
                        panel, 
                        "Titre", 
                        JOptionPane.OK_CANCEL_OPTION);
    if (option == JOptionPane.OK_OPTION) {
       ...
    }

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Process Expert - Document Management
    Inscrit en
    Novembre 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Process Expert - Document Management
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Ok je vois la solution
    Mais vu le nombre d'écrans je vais garder ca pour un prochain projet

    Mais sinon quelle serait la méthode pour lancer le setModalResult du JModalDialog parent à partir d'une propriété d'un hypothétique "JModalButton"?
    Et ajouter ce composant à la palette NetBeans?

    En tout cas merci pour l'histoire du JOptionPane

  6. #6
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Citation Envoyé par Amayii
    Mais sinon quelle serait la méthode pour lancer le setModalResult du JModalDialog parent à partir d'une propriété d'un hypothétique "JModalButton"?
    Si l'instance du JModalButton dispose d'une référence sur le JModalDialog, c'est immédiat. Sinon, tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    JModalDialog myModalDialog = (JModalDialog) SwingUtilities.getAncestorOfClass(JModalDialog.class, myModalButton);
    if (myModalDialog != null) {
      myModalButton.setModalResult(...);
    }

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Process Expert - Document Management
    Inscrit en
    Novembre 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Process Expert - Document Management
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Ok je vois l'idée, mais ca implique de déclencher un event (type actionPerformed pour le click) ?
    Pour avoir une copie de la fonctionnalité Delphi/C#, il faudrait que sans aucun code, l'actionPerformed soit appelé.

    D'une vue d'illetré, je pourrais croire que je peux copier ton code dans ma classe JModalButton et qu'en cas de clic, le bouton déposé sur le JModalDialog soit capable de réagir? Mais en utilisant une propriété design time du dit bouton?

    Scénario car je suis un peu confu et obsédé par Delphi

    1) Créer une fenêtre modale type JModalForm
    2) Y déposer 2 JModalButton
    a) le 1° avec sa propriété modalResult à mrOK
    b) le 2° avec sa propriété modalResult à mrCancel
    3) Le fait d'executer le showModal de la fenêtre (sans assigner de code aux events des boutons), permettrait de fermer la fenêtre juste en cliquant un des boutons.

    Réalisable ou pas? Ca impliquerait que le bouton soit présent sur un JModalDialog (même si vérifiable par le code), mais je rêve les yeux ouverts?

  8. #8
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Je suis désolé, je ne vois pas du tout où tu veux en venir...
    Peut-être faudrait-il moins penser en Delphi et plus en Java/Swing

  9. #9
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Citation Envoyé par herve91
    Je suis désolé, je ne vois pas du tout où tu veux en venir...
    Peut-être faudrait-il moins penser en Delphi et plus en Java/Swing
    +1, pourquoi ne pas se contenter du setModal(true/false) du JDialog, et de préciser le bouton par défaut et deux trois JOptionPane bien sentis, là tu réinventes a roue pour franchement pas grand chose
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Process Expert - Document Management
    Inscrit en
    Novembre 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Process Expert - Document Management
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Je suis bien l'idée mais bon à force d'avoir 36 langages j'aime bien retrouver mes marques
    dont le modal Delphi/C#... pour dire j'avais même une unit delphi VBS.pas

    et oui, on ne se refait pas

    en tout merci pour les tips, sujet clos !

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

Discussions similaires

  1. [Article] Créer des boutons avec un effet de brillance
    Par FirePrawn dans le forum Publications (X)HTML et CSS
    Réponses: 1
    Dernier message: 04/08/2013, 12h08
  2. [Article] Créer des boutons avec icônes sans utiliser d'images
    Par FirePrawn dans le forum Publications (X)HTML et CSS
    Réponses: 9
    Dernier message: 07/09/2012, 16h37
  3. [CSS 3] Créer des boutons avec icônes sans utiliser d'images
    Par FirePrawn dans le forum Mise en page CSS
    Réponses: 9
    Dernier message: 07/09/2012, 16h37
  4. [CSS 3] Créer des boutons avec un effet de brillance
    Par FirePrawn dans le forum Mise en page CSS
    Réponses: 0
    Dernier message: 02/08/2012, 09h37
  5. Réponses: 0
    Dernier message: 04/12/2008, 15h10

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