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 :

Clique gauche sur un systray


Sujet :

AWT/Swing Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Clique gauche sur un systray
    Bonjour tout le monde,

    Je dispose de la JDK6.0 et j'essaye de manipuler un Systray.
    Pour l'instant j'ai ajouté un PopupMenu au Systray et lorsque j'effectue un clique droit sur mon icône tout fonctionne correctement

    Maintenant je souhaite afficher un nouveau PopupMenu lors du clique gauche...
    J'arrive à intercepter le clique gauche mais impossible d'afficher le popup.

    L'idée pour afficher deux PopupMenu différents suivant le clique, serait d'ajouter soit l'un soit l'autre lors d'un clique (setPopupMenu()) puis de déclencher son affichage quand c'est nécessaire (quand ce n'est pas un clique droit).

    Si quelqun peut m'aider?
    Merci d'avance !

  2. #2
    Membre actif
    Avatar de fabou3377
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2006
    Messages : 182
    Points : 280
    Points
    280
    Par défaut
    Est-ce que quelqu'un a trouvé la parade à ce problème?

  3. #3
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 83
    Points : 96
    Points
    96
    Par défaut
    T as pas un évènement du style MouseEvent e sur lequel tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if(e.getButton == e.BUTTON1){
     //clic droit
    }else{
    // clic gauche
    }

  4. #4
    Membre actif
    Avatar de fabou3377
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2006
    Messages : 182
    Points : 280
    Points
    280
    Par défaut
    Salut merci de ta réponse, j'arrive à capturer sans problème le clic sur le bouton gauche cependant je n'arrive pas à afficher le popup menu...
    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
     
    package sytemstray;
     
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.event.*;
     
    public class Main implements Runnable {
     
         PopupMenu menu;
         MenuItem actionMenu, exitMenu, paramMenu;
     
     
        public static void main(String[] args) {
            try {
    // ceci est facultatif, c'est juste pour avoir le même skin que l'OS
                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            } catch (Exception ex) {
                ex.printStackTrace();
            }
     
            EventQueue.invokeLater(new Main());
        }
     
        public void run() {
     
            menu = new PopupMenu();
            actionMenu = new MenuItem("Actions");
            paramMenu = new MenuItem("Parameters");
            exitMenu = new MenuItem("Exit");
     
     
            // on vérifie si le Tray est supporté par l'OS
            if(SystemTray.isSupported()){
                //On ajoute les options au menu
                 menu.add(actionMenu);
                 menu.add(paramMenu);
                 menu.addSeparator();
                 menu.add(exitMenu);
     
     
                // écouteur pour l'item "Action Menu"
                actionMenu.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent ev) {
                        JOptionPane.showMessageDialog(null, "Hello World !");
                    }              
                });
     
     
                // écouteur pour l'item "Exit"
                exitMenu.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        System.exit(0);
                    }
                });
     
     
    // on charge l'image qui sera utilisé comme icône
                final Image icon = Toolkit.getDefaultToolkit().getImage("icon_tray.png");
     
                final TrayIcon trayIcon = new TrayIcon(icon, "Mon application qui tue", menu);       
     
                try {
    // on ajoute l'icône dans le tray
     
                    final SystemTray systemTray = SystemTray.getSystemTray();
     
                    systemTray.add(trayIcon);
     
     
     
    // on affiche un info-bulle
                    trayIcon.displayMessage("Serge-Mail", "Vous avez 3 nouveaux messages.", TrayIcon.MessageType.INFO);
     
     
     
                  trayIcon.addMouseListener(new MouseListener(){
                        public void mouseClicked(MouseEvent e) {
                           menu.show(trayIcon,e.getX(),e.getY());    /*erreur ici */
     
                        }                   
                  }     
                          );
     
     
                } catch (AWTException ex) {
                    ex.printStackTrace();
                }
     
            } else {
                System.err.println("Tray not supported");
            }
        }

  5. #5
    Membre actif
    Avatar de fabou3377
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2006
    Messages : 182
    Points : 280
    Points
    280
    Par défaut
    Est-ce que quelqu'un connaît la solution?? Merci pour votre aide...

  6. #6
    Membre actif
    Avatar de fabou3377
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2006
    Messages : 182
    Points : 280
    Points
    280
    Par défaut
    Je relance ce post...

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 61
    Points : 58
    Points
    58
    Par défaut
    TrayIcon n'hérite pas de la classe Component d'ou ton erreur... je sias pas si c est possible...

  8. #8
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 6
    Points : 6
    Points
    6
    Par défaut clic gauche sur trayicon
    bonjour, je relance ce post car j'ai ce meme probleme, je veux afficher mon popup menu sur le clic gauche de ma souris sur la trayicon et donc j'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    trayIcon.addMouseListener(ml);
    MouseListener ml= new MouseListener(){
    public void mouseClicked(MouseEvent e) {
    popup.show(e.getComponent(),e.getX(),e.getY());
    }
    }
    mais effectivement selon la doc un getComponent sur un trayICon renvoie la valeur nulle...
    donc je suppose que beaucoup d'entre vous ont réussi a mettre une popupmenu sur un clic gauche de la souris sur un trayIcon...avez vous une idée??

    merci

  9. #9
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 615
    Points : 15 678
    Points
    15 678
    Par défaut
    Il n'y a pas de solution propre a ce problème car comme tu le dis, le component est null. On est obligé de faire sans.

    Un contournement possible serait d'utiliser le JPopupMenu qui n'est pas tributaire d'un composant parent :
    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
    final JPopupMenu menu = new JPopupMenu();
    JMenuItem item = new JMenuItem("Item"); 
    menu.add(item);
     
    TrayIcon trayIcon = new TrayIcon(monIcone, "monTexte");
    trayIcon.addMouseListener(new MouseAdapter() {
    	@Override
    	public void mouseClicked(MouseEvent e) {
    		Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    		int x = e.getX(); 
    		int y = e.getY(); 
    		menu.show(null, x, y);
    		if (x + menu.getWidth() > d.width) {
    			x -= menu.getWidth();
    		}
    		if (y + menu.getHeight() > d.height) {
    			y -= menu.getHeight();
    		}
    		menu.setLocation( x, y);
    	}
    });
    Si tu tiens à utiliser un PopupMenu classique, il faudra le relier à une autre fenêtre (ou une fentre cachée) mais il sera difficile de la positionner proprement vu qu'elle n'a pas de méthodes getWidth() et getHeight().

  10. #10
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    merci, effectivement la Jpopmenu est bel et bien la solution...merci encore

  11. #11
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 615
    Points : 15 678
    Points
    15 678
    Par défaut
    A noter que cette solution est bonne pour Windows (et probablement Linux a vérifier) seulement.
    Sous MacOS X mieux vaux revenir au PopupMenu classique vu qu'il est déjà par défaut ouvert par un clic gauche et que les e.getX() et e.getY() ne seront pas relatifs à l'écran entier.

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 281
    Points : 321
    Points
    321
    Par défaut
    Je deterre un peu ce post.

    J'ai utilisé la méthode du JPopupMenu mais étrangement, les JMenu et JMenuItem ne réagissent pas normalement. C'est à dire qu'il ne se sélectionne pas quand on va dessus et les JMenu ne font pas apparaitre les sous-menu.

    Des réponses ?

    edit : J'ai résolu mon problème. Il suffisait de lancer la méthode popup.setInvoker(popup);

  13. #13
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2019
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Bonjour,
    Je déterre ce post car je cherche aussi à ouvrir l'application dès que je fais un clic gauche. Je cherche aussi à supprimer le logo de l'application de la barre des tâches dès que je réduis l'application ainsi l'icône ne serait visible que dans le systray.

    Voici mon code actuel:
    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
     
    //checking for support
            if(!SystemTray.isSupported()){
                System.out.println("System tray is not supported !!! ");
                return ;
            }
            //get the systemTray of the system
            SystemTray systemTray = SystemTray.getSystemTray();
     
            //get default toolkit
            //Toolkit toolkit = Toolkit.getDefaultToolkit();
            //get image 
            //Toolkit.getDefaultToolkit().getImage("src/resources/busylogo.jpg");
            Image image = Toolkit.getDefaultToolkit().getImage("favicon2.png");
     
            //popupmenu
            PopupMenu trayPopupMenu = new PopupMenu();
     
            // double clic
            trayPopupMenu.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    JOptionPane.showMessageDialog(null, "This dialog box is run from System Tray");
                }
            });
     
          //setting tray icon
            TrayIcon trayIcon = new TrayIcon(image, "Occicom", trayPopupMenu);
            //adjust to default size as per system recommendation 
            trayIcon.setImageAutoSize(true);
     
            //1t menuitem for popupmenu
            MenuItem menu = new MenuItem("Menu");
            menu.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    //JOptionPane.showMessageDialog(null, "Action Clicked");
                    trayIcon.displayMessage("", "bfdbdf", MessageType.INFO);
                }
            });     
            trayPopupMenu.add(menu);
            trayPopupMenu.addSeparator ();
            //2nd menuitem of popupmenu
            MenuItem close = new MenuItem("Quitter");
            close.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    System.exit(0);             
                }
            });
            trayPopupMenu.add(close);
     
     
     
            try {
                systemTray.add(trayIcon);
            } catch(AWTException awtException){
                awtException.printStackTrace();
            }
    Merci d'avance pour toute l'aide que vous pourrez m'apporter.

Discussions similaires

  1. Réponses: 1
    Dernier message: 28/08/2014, 16h17
  2. Clique gauche sur TrayIcon
    Par druzy dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 27/07/2013, 17h41
  3. (Menu contextuel) Clique droit sur images
    Par Furius dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 02/10/2005, 20h21
  4. decalage à gauche sur une tres grand tableau de char
    Par petitours dans le forum C++Builder
    Réponses: 10
    Dernier message: 14/07/2005, 22h40
  5. [MFC]Intercepter evenement sur icone systray
    Par 0xYg3n3 dans le forum MFC
    Réponses: 1
    Dernier message: 29/04/2005, 21h53

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