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 :

Avoir le focus sur 2 composants en même temps - envoyer les keycode sur un autre composant


Sujet :

AWT/Swing Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 112
    Points : 58
    Points
    58
    Par défaut Avoir le focus sur 2 composants en même temps - envoyer les keycode sur un autre composant
    Bonjour à tous,

    Je suis en train de réaliser un champs de saisie de code postal.

    Objectif :Lorsque je tape mon code postal, je veux que les communes soit recherchées au fur et à mesure. Jusque là tout fonctionne.

    Exemple : je tape 7239.. et au fur à mesure que je tape, la liste dans la combobox située à coté se réduit grandement...

    cf. ci-dessous



    Maintenant, je voudrais que lorsque j'appuie sur la fleche haut ou bas du clavier je puisse me promener dans la liste de droite.
    et ceci tout en gardant le focus sur la saisie du code postal.


    J'ai bien trouvé comment répérer les touches haut et bas mais je ne vois pas comment les envoyer sur le composant de droite sans perdre la saisie sur mon champs code postal..

    Quelqu'un sait il faire ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    private void ongletChampCodePostalpKeyReleased(java.awt.event.KeyEvent evt) {                                                 
     
        int keyCode = evt.getKeyCode();
        if (keyCode == 38 || keyCode == 40)
        {
            System.out.println("touche haut ou bas");
           //        ongletChampsComboVille. ???
     
        }

  2. #2
    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
    Depuis le KeyListener de ta JComboBox tu peux appeler la méthode dispatchEvent de ta JList pour lui rediriger l'évènement s'il s'agit des flèches haut et bas. Toutefois je n'ai aucune idée de comment va réagir le focus vis à vis de ça.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 112
    Points : 58
    Points
    58
    Par défaut
    salut,

    pour le dispatchEvent pourrait tu me donner une exemple qui fonctionne car la doc de sun m'a pas bcq avancé. merci

  4. #4
    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
    Bon pour le dispatchEvent ça a l'air un poil plus tricky, mais sinon c'est jouable autrement. Juste en jouant sur la visibilité du popup et le selectedIndex

    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
     
     
    package swing;
     
    import java.awt.event.KeyAdapter;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
     
    import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
     
    public class TestDispatch extends JFrame{
     
     
        private JComboBox combo;
        private JTextField tf;
     
     
        /**
         * 
         */
        public TestDispatch() {
            Object[] tab = {"toto","itti","branish","sodel"};
            combo = new JComboBox(tab);
            tf = new JTextField();
            tf.addKeyListener(new KeyAdapter() {        
     
     
                @Override
                public void keyReleased(KeyEvent e) {
                    int add=combo.getSelectedIndex();
                    if(e.getKeyCode() == KeyEvent.VK_UP || e.getKeyCode() == KeyEvent.VK_DOWN) {                
                        if(!combo.isPopupVisible()) {
                            combo.showPopup();
                        } else {
                            if(e.getKeyCode() == KeyEvent.VK_UP && add>0) {
                                add-=1;
                            }
                            if(e.getKeyCode() == KeyEvent.VK_DOWN && add<combo.getModel().getSize()-1) {
                                add+=1;
                            }
                            combo.setSelectedIndex(add);
                        }                    
                    }    
     
                    if(e.getKeyCode() == KeyEvent.VK_ENTER) {
                        combo.hidePopup();
                    }                                
                }        
     
            });
            JPanel p = new JPanel();
            tf.setColumns(10);
            p.add(tf);
            p.add(combo);
            add(p);
            pack();        
            setLocationRelativeTo(null);
            setDefaultCloseOperation(DISPOSE_ON_CLOSE);
            setVisible(true);
        }
     
     
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            new TestDispatch();
        }
     
    }

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 112
    Points : 58
    Points
    58
    Par défaut
    Salut,

    Merci pour ta solution, elle marche super.
    Pourrais tu me dire ou trouver les équivalences des attributs (VK_UP, VK_DOWN....) avec les touches ?

    Sinon, j'ai trouve une autre solution qui fonctionne aussi et qui évite de gérer l'index en utilisant les focus. La voici : (ça pourra toujours servir à quelqu'un)

    Sur le champs texfield code postal:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    private void ongletClientsChampCpKeyReleased(java.awt.event.KeyEvent evt) {   
        int keyCode = evt.getKeyCode();
     
        if (keyCode == 38 || keyCode == 40)
            {
            if (keyCode == 40) ongletClientsComboVille.putClientProperty("action","bas");
            else if   (keyCode == 38) ongletClientsComboVille.putClientProperty("action","haut");
            ongletClientsComboVille.requestFocus();
            }
    Sur le gain du focus des communes :


    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
    private void ongletClientsComboVilleFocusGained(java.awt.event.FocusEvent evt) {                                                    
            try {
    String action=new String( (String)ongletClientsComboVille.getClientProperty("action"));
         System.out.println("action vaut : "+action);
     
     
         Robot robot = new Robot();
                if (action.equals("haut")) robot.keyPress(KeyEvent.VK_UP);
                else if (action.equals("bas")) robot.keyPress(KeyEvent.VK_DOWN);
     
     
                    System.out.println("paf");
     
     
            } catch (AWTException ex) {
                Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex);
            }
        // TODO add your handling code here:
    }

  6. #6
    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
    Bah dans la javadoc de la classe KeyEvent

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 112
    Points : 58
    Points
    58
    Par défaut
    Exact.
    Encore merci.

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

Discussions similaires

  1. [MySQL] Comment se connecter sur 2 BD en même temps ?
    Par cassy dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 26/05/2006, 13h57
  2. Requête sur deux tables en même temps
    Par will89 dans le forum Requêtes
    Réponses: 2
    Dernier message: 20/04/2006, 12h01
  3. Tri sur deux champs en même temps
    Par Azharis dans le forum Access
    Réponses: 8
    Dernier message: 11/01/2006, 14h10
  4. where sur 2 colonnes en même temps
    Par linux dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 28/10/2005, 10h16
  5. Comptez sur deux tables en même temps
    Par genova dans le forum Langage SQL
    Réponses: 12
    Dernier message: 13/09/2004, 19h58

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