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 :

Composant gaphique bloquant


Sujet :

AWT/Swing Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 53
    Par défaut Composant gaphique bloquant
    Bonjour.
    Je veux mettre en place un composant graphique qui permette à l'utilisateur de saisir des informations. Ce composant doit se présenter en surimpression sur un autre panel, comme décrit sur la pièce jointe.
    Mon problème est le suivant .. j'affiche mon composant dans un handler, et j'aimerais attendre qu'il me renvoie les valeurs qui se trouvent des les JTextField avant de poursuivre l'exécution du code du handler (donc attendre que l'utilisateur appuie sur la touche entrée ou clique sur un bouton du composant). Est-il possible de rendre un composant bloquant (un peu à la manière d'un JDialog en fait...) ?
    Merci d'avance pour vos idées !

    Anaxa.
    Images attachées Images attachées  

  2. #2
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Sauf combine spéciale, ce n'est pas possible.

    Préfère l'approche style automate à états : état avant que tes composants soient remplis, état après. En calant un listener, tu sauras à quel moment tu changes d'état.

  3. #3
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Tu peux en faire un JDialog en faisant setUndecorated(true) pour ne pas dessiner les contours de la fenêtre.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 53
    Par défaut
    Merci pour les réponses !
    natha... J'ai bien pensé au coup de la JDialog sans contour, mais il semble que la JDialog ne soit pas un composant que l'on puisse rendre transparent... Donc j'en reviens au même point...

    gifffftane, tu pourrais expliciter un peu ton approche ? Je ne comprends pas très bien ce que tu proposes... Moi en fait je voudrais que lorsque l'utilisateur clique ou appuie sur entrée, la boîte se ferme et envoie une notification au Thread qui l'a ouvert ...

    Merci !
    Anaxa

    PS : quelqu'un saurait-il expliquer pourquoi ce n'est pas possible de réaliser ce comportement alors qu'il est mis en place dans le jdk à plusieurs reprises (par exemple pour le JDialog...) ? Re-merci ! ;-)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Utilises le glasspane ou un JXLayer


    Pour voir une implémentation correcte de glass pane bloquant:
    http://weblogs.java.net/blog/alexfro...behaved_g.html
    http://weblogs.java.net/blog/alexfro.../06/index.html

    PS : quelqu'un saurait-il expliquer pourquoi ce n'est pas possible de réaliser ce comportement alors qu'il est mis en place dans le jdk à plusieurs reprises (par exemple pour le JDialog...) ? Re-merci ! ;-)
    En fait il s'agit de modalité inter fenêtre, et il est probable que ce soit géré par java au niveau OS (les OS propose ce genre de fonctionnalités)

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 53
    Par défaut
    Je vais regarder dans cette direction, mais j'ai peur que ça ne fonctionne pas ... en fait comme tu peux le voir, j'utilise un composant "map", qui m'affiche les cartes. Ce composant comporte des interfaces qui permettent d'obtenir le genre d'affichage que j'ai posté, mais je ne suis pas certain que ce soit compatible avec le glasspane (en fait je suis presque sûr du contraire).

    Merci.
    Anaxa

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 53
    Par défaut
    Bon j'ai regardé un peu tout ça ... comme prévu, pas moyen d'utiliser le glasspane...
    Je me demandais si il existait un moyen de procéder comme suit en Java...

    - Pour gérer le comportement de mon appli, j'installe un handler sur la carte. Ce handler est composé notamment d'un mouseListener.

    - Quand je clique sur la carte, j'entre dans la méthode adéquate du mouseListener et j'affiche ma fenêtre en surimpression.

    - Quelque part (mais où ? dans le handler ?... et comment ?), j'ai un composant en attente d'un évènement (le handler ?) qui sera envoyé par la fenêtre en surimpression lorsque le user valide (par entrée ou clic sur un bouton)... Lorsque cet évènement est généré, je réalise le traitement correspondant à la saisie des données de la fenêtre...

    C'est cette dernière étape qui me pose problème... Si quelqu'un a une idée...
    Anaxa.

    PS : voilà le code de mon handler, si cela peut aider... J'ai entouré d'un commentaire le code que je désire mettre dans la fonction appelée lors de la génération d'un évènement...
    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
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
     
    public class CreateSensorSiteHandler implements EditionHandler{
        /** The cursor to display on the map while the handler is installed. */
        private Cursor CUR_NEW_SENSOR_SITE = null;
        /** Is the handler currently installed ? */
        private boolean installed = false;
        /** The map associated with the handler. */
        private MSS_Map map;
        /** 
         * The {@link javax.swing.event.MouseInputListener} 
         * used to create a new site. 
         */
        MouseInputListener listener = new MouseListen();
        /** The decoration used to diplay the coordinates of mouse. */
        PointerDecoration decoration = new PointerDecoration();
     
        /**
         * Constructor.
         * Creates a handler with a specific cursor.
         */
        public CreateSensorSiteHandler(){
            buildcursor();
        }
     
        /**
         * Builds a specific cursor, for the action of
         * creating new sensor sites.
         */
        private void buildcursor(){
            Toolkit tk = Toolkit.getDefaultToolkit();
            ImageIcon ico_newSite = new ImageIcon(
                this.getClass().getResource("/resources/cursors/createSite.gif"));
     
            BufferedImage img = 
                    new BufferedImage(32, 32, BufferedImage.TYPE_INT_ARGB);
            img.getGraphics().drawImage(ico_newSite.getImage(), 0, 0, null);
            CUR_NEW_SENSOR_SITE = tk.createCustomCursor(img, 
                    new Point(1, 1), "new_site");
        }
     
        public void cancelEdition() {}
     
        public ImageIcon getIcon() {return null;}
     
        public String getTitle() {
            return "Create Sensor Site Handler";
        }
     
        public boolean isInstalled() {
            return installed;
        }
     
        /**
         * Called when {@code map.setEditionHandler(new CreateSensorSiteHandler());}
         * 
         * @param curMap    The map used.
         */
        public void install(EditableMap2D curMap) {
            installed = true;
            map = (MSS_Map)curMap;
            map.addDecoration(decoration);
        }
     
        public void uninstall() {
            installed = false;
            map.removeDecoration(decoration);
            map = null;
        }
     
        /**
         * Call when {@code map.setActionState(ACTION_STATE.EDIT);}
         * 
         * @param curMap    The map used.
         */
        public void installListeners(EditableMap2D curMap) {
            map = (MSS_Map)curMap;
            map.getComponent().addMouseListener(listener);
            map.getComponent().addMouseMotionListener(listener);
        }
     
        public void uninstallListeners() {
            map.getComponent().removeMouseListener(listener);
            map.getComponent().removeMouseMotionListener(listener);
        }  
     
        /* -------------------------- INNER CLASS ------------------------- */
     
        /**
         * This inner class specify the action of the handler.
         * In our case, when the mouse is clicked, we display a {@code JOptionPane}
         * to get the name of the site, and then , we create the new sensor
         * site.
         * <br><br>
         * We also specify that when the mouse is on the map, the cursos has a 
         * specific form.
         * 
         * @author  Thomas Bonavia
         * 
         * @see     java.awt.event.MouseListener
         */
        private class MouseListen implements MouseInputListener{
     
            public void mouseMoved(MouseEvent e) {
                decoration.setInfosToDraw(e.getX(), e.getY(), map, true);
            }
     
            /**
             * Allows to create a new site.
             * 
             * @param e The mouse event generated.
             */
            public void mouseClicked(MouseEvent e) {
                decoration.setInfosToDraw(e.getX(), e.getY(), map, false);
     
    /** PARTIE A MODIFIER - PLUS DE JOPTIONPANE */
                String reponse = JOptionPane.showInputDialog(null,
                        "what is the name for the site?");
     
                // If nothing was entered in the input area
                if(reponse == null) {
                    return;
                } else if(reponse.equals("")) {
                    JOptionPane.showMessageDialog(null,
                            "A name must be given to the state",
                            "Warning",JOptionPane.WARNING_MESSAGE);
                } else {
                    // We get the map coordinates
                    Coordinate coord = 
                        MSS_Window.getInstance().getMap().getRenderingStrategy().
                        toMapCoord(e.getX(), e.getY());
                    double tElev = MSS_ControlProject.getRaster().getElevation(
                            coord.x, coord.y);
     
                    // We create the new sensor site -> Replace 0 by the the height
                    MSS_ControlProject.addSensorSite(
                            new SensorSiteStation(reponse,coord.x, coord.y,0,tElev));
                }
    /** FIN PARTIE A MODIFIER */
                decoration.setInfosToDraw(e.getX(), e.getY(), map, true);
            }
     
            /**
             * Allows to change the cursor.
             * 
             * @param e The mouse event generated.
             */
            public void mouseEntered(MouseEvent e) {
                map.getComponent().setCursor(CUR_NEW_SENSOR_SITE);
            }
     
            public void mouseExited(MouseEvent e) {
                decoration.setInfosToDraw(e.getX(), e.getY(), map, false);
            }
     
            public void mouseDragged(MouseEvent e) {}
     
            public void mousePressed(MouseEvent e) {} 
            public void mouseReleased(MouseEvent e) {}
     
        }
    }

  8. #8
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 111
    Par défaut
    *Fier que quelqu'un utilise mes widgets carto*

    tu mets un petit bouton valider sur ta mapdecoration qui va executer une methode dans le handler.

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/06/2002, 00h15
  2. Existe t'il un composant permettant de jouer un son wav?
    Par scorpiwolf dans le forum C++Builder
    Réponses: 5
    Dernier message: 20/06/2002, 14h10
  3. Redéfinir l'événement OnExit de mon composant TEditFloat
    Par Seb des Monts dans le forum C++Builder
    Réponses: 5
    Dernier message: 18/06/2002, 16h10
  4. Installer ses composants
    Par Geronimo dans le forum C++Builder
    Réponses: 14
    Dernier message: 18/06/2002, 14h51
  5. Re-dimensionnement automatique de composants
    Par ludo_7 dans le forum C++Builder
    Réponses: 10
    Dernier message: 16/05/2002, 16h35

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