Je travaille sur l'icône de la barre de tâches dans Java, j'aime ouvrir un menu contextuel à l'aide de clic gauche sur même menu contextuel que j'ouvre le clic droit, puis aidez-moi avec une réponse rapide.
Merci d'avance .. . P>
Voici le code travaillant pour un clic droit. N'oubliez pas de placer une image @ "src / img" dossier avec nom "titleImg.jpg" p>
il suffit d'exécuter cela ... c'est un exemple de travail, mais je dois montrer la même pop up avec clic gauche P>
J'ai vérifié l'écouteur de souris, il écoute le clic gauche sur l'icône du bac, mais comment afficher le menu contextuel à l'aide de celle-ci ??? p>
package com.abc.dao; import java.awt.AWTException; import java.awt.CheckboxMenuItem; import java.awt.Menu; import java.awt.MenuItem; import java.awt.PopupMenu; import java.awt.SystemTray; import java.awt.Toolkit; import java.awt.TrayIcon; public class MyTaskTray { public static void main(String arg[]){ //Check the SystemTray is supported if (!SystemTray.isSupported()) { System.out.println("SystemTray is not supported"); return; } final PopupMenu popup = new PopupMenu(); final TrayIcon trayIcon = new TrayIcon(Toolkit.getDefaultToolkit().getImage(new java.io.File("").getAbsolutePath()+"/bin/img/titleImg.jpg"), "Library Drop"); final SystemTray tray = SystemTray.getSystemTray(); // Create a pop-up menu components MenuItem aboutItem = new MenuItem("About"); CheckboxMenuItem cb1 = new CheckboxMenuItem("Set auto size"); CheckboxMenuItem cb2 = new CheckboxMenuItem("Set tooltip"); Menu displayMenu = new Menu("Display"); MenuItem errorItem = new MenuItem("Error"); MenuItem warningItem = new MenuItem("Warning"); MenuItem infoItem = new MenuItem("Info"); MenuItem noneItem = new MenuItem("None"); MenuItem exitItem = new MenuItem("Exit"); //Add components to pop-up menu popup.add(aboutItem); popup.addSeparator(); popup.add(cb1); popup.add(cb2); popup.addSeparator(); popup.add(displayMenu); displayMenu.add(errorItem); displayMenu.add(warningItem); displayMenu.add(infoItem); displayMenu.add(noneItem); popup.add(exitItem); trayIcon.setPopupMenu(popup); try { tray.add(trayIcon); } catch (AWTException e) { System.out.println("TrayIcon could not be added."); } } }
5 Réponses :
Je pense que vous recherchez un Mouselistener code >
que vous allez ajouter à votre trayicon code> et activera quand un bouton de la souris est cliqué, déplacé, etc. Pour l'obtenir pour fonctionner pour les clics gauche seulement, je n'ai consulté que les boutons.
MouseEveillant code> a > (
bouton1 code>) étant pour les clics de souris gauche. P>
Le lien que vous avez ajouté est pour C # pas Java
Vous pouvez ajouter actionlistener code> au
Trayicon code>, souris double_click peut afficher
joptionpane code>
@Farid Peu importe, si menu contextuel, fenêtre contextuelle ou boîte de dialogue
Je n'ai aucun problème avec votre code, JPOPUPMENU accelerator pour SetPopupMenu () code> est le bouton droit de la souris, utilisez Afficher (composant Invoker, int x, int Y)
Vous pouvez lire le didacticiel officiel à http://docs.oracle .com / javase / tutoriel / uiswing / mos / systemtray.html ou consultez http://weblogs.java.net/blog/ixmal/archive/2006/05/USTION_JPOPUPMEN.html Pour une solution pour utiliser un JPopuomenu à la place p>
déjà vérifié cet exemple, il contient 2 numéros, 1st cela fonctionne également pour cliquer avec le bouton droit de clic droit pas pour le menu de gauche et 2e lorsqu'il affiche le menu contextuel que le menu ne soit pas supprimé ... et le 1st exemple u a donné des œuvres pour le clic droit que j'ai aussi utilisé. Celui-ci pour un clic droit. mais je dois montrer la même popup sur le clic gauche
Ce que vous avez réellement manqué est un composant parent pour montrer votre popupmenu. Une façon d'y parvenir, est d'utiliser un cadre "invisible" (en fait, il est visible mais avec des limites de 0 et non décoré, vous ne pouvez donc pas le voir) comme ceci:
frame.setType(Type.UTILITY);
Il fonctionne bien, mais quand je clique avec le bouton droit de la souris sur l'icône et, après cela, lorsque je suis parti, cliquez sur l'icône, en cliquant sur gauche si vous donnez l'exception: Java.lang.illegalargumentException: Origine non dans la hiérarchie des parents à Java.Awt.PopupMenu.show. (Source inconnue) à com.mytasktray $ 1.Mouseclicad (mytaSktray.java:66) à java.awt.trayicon.processMousevent (source inconnue) à java.awt.trayicon.processevent (source inconnue) à java.awt.trayicon.dispatchevent (Source inconnue)
@Farid En effet, il provoque une question, j'ai raté cela. La solution consiste à ajouter la fenêtre contextuelle au cadre code> code> juste avant de montrer la fenêtre contextuelle. J'ai mis à jour mon message pour refléter cela.
Cela a résolu mon problème et fonctionnant bien, mais il y a une chose qui sera bonne pour que l'utilisateur l'utilise la prochaine fois que si nous utilisons JDialog au lieu de cadre, il deviendra plus bon car il ne montrera pas le cadre sur la barre de démarrage
@Farid, pas totalement sûr mais vous pouvez utiliser un jwindow à la place
Bonne idée. J'ai pris beaucoup d'aide de votre réponse.
Notez que cette solution utilisant image code> ajouterait la barre de titre au menu de la tâche. Si vous ne voulez pas que cela vérifie la réponse à la réponse Stackoverflow.com/a/19093753/445600 . Donc, juste STETYPE avec utilitaire et vous êtes prêt à partir.
@scarn Duely noté. J'ai mis à jour le poste pour refléter cela. Merci et acclamations
Ceci devrait fonctionner:
trayIcon.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { JOptionPane.showMessageDialog(null, "This shows after a left-click on tray icon"); } });
Qu'est-ce que tu as jusqu'à présent?
@ Guillaume Polet, merci pour votre grande aide
Vous pouvez utiliser et / ou accepter une réponse si cela aidait et / ou résolu votre problème. Acclamations ;-)