2012-09-28 9 views
7

Wie kann ich ein vertikales Trennzeichen im Popup-Menü der App in der Taskleiste hinzufügen?Hinzufügen eines vertikalen Trennzeichens in PopupMenu in der Taskleiste

tray = SystemTray.getSystemTray();    
    openMenuItem = new MenuItem("Open P"); 
    stopKLMenuItem = new MenuItem("Stop"); 
    exitMenuItem = new MenuItem("exit"); 
    menu.add(exitMenuItem); 
    menu.add(stopKLMenuItem); 
    menu.addSeparator(); // adds a horizontal separator 
    menu.add(openMenuItem); 
    trayIcon = new TrayIcon(image,"P",menu); 

Die Anweisung menu.addSeparator() fügt einen horizontalen Separator hinzu. Ich wollte auch eine vertikale Trenn wie:

enter image description here

Wie kann ich das tun?

+1

keine Ahnung, nur +1 für interessante Frage – mKorbel

Antwort

6

Einen einfachen Trick ist, ein leeres Symbol in die JMenuItem hinzuzufügen.Das Look and Feel fügt dann den vertikalen Trenn Sie suchen (natürlich funktioniert dies nur mit dem Windows-L & F, andere L & F kann dies anders machen):

Menu example result

Und der Code, der produziert es:

import java.awt.AWTException; 
import java.awt.SystemTray; 
import java.awt.TrayIcon; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import java.awt.image.BufferedImage; 

import javax.swing.ImageIcon; 
import javax.swing.JMenuItem; 
import javax.swing.JPopupMenu; 
import javax.swing.SwingUtilities; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class TestTrayIcon { 

    protected void initUI() { 

     TrayIcon trayIcon = new TrayIcon(new ImageIcon(
       "http://3.bp.blogspot.com/-nh7fv5FqpU4/TeUbTvAdSkI/AAAAAAAAAUo/Ig53KJGvzlk/s45/avatar.png").getImage()); 

     final JPopupMenu popupMenu = new JPopupMenu(); 
     JMenuItem checkBox1 = new JMenuItem("Last checked...", new ImageIcon(new BufferedImage(16, 16, BufferedImage.TYPE_INT_ARGB))); 
     JMenuItem checkBox2 = new JMenuItem("Open..."); 

     popupMenu.add(checkBox1); 
     popupMenu.addSeparator(); 
     popupMenu.add(checkBox2); 

     trayIcon.addMouseListener(new MouseAdapter() { 
      @Override 
      public void mouseReleased(MouseEvent e) { 
       if (e.isPopupTrigger()) { 
        popupMenu.setLocation(e.getX(), e.getY()); 
        popupMenu.setInvoker(popupMenu); 
        popupMenu.setVisible(true); 
       } 
      } 
     }); 
     try { 
      SystemTray.getSystemTray().add(trayIcon); 
     } catch (AWTException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } catch (InstantiationException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } catch (IllegalAccessException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } catch (UnsupportedLookAndFeelException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
       new TestTrayIcon().initUI(); 
      } 
     }); 
    } 

} 
+0

Ich verstehe Sie nicht .. Sie meinen, vertikale Separator wird auf eigene Faust hinzugefügt werden? Ich habe das versucht, aber kein Ergebnis. [Zusatzcode] (http://i46.tinypic.com/2ia7evm.jpg) ** & ** [Code des Look and Feel] (http://i47.tinypic.com/2zjlyxz.jpg) –

+0

@SuhailGupta Ja, in Swing wird automatisch angezeigt (versuchen Sie, mein Beispiel auf Ihrem PC auszuführen). Jetzt müssen Sie ein Swing JPopupMenu und nicht das AWT PopupMenu verwenden. Da Sie es nicht auf dem TrayIcon direkt einstellen können, um dieses Snippet verwenden, um es erscheinen zu lassen: 'trayIcon.addMouseListener (neue Mouseadapter() { public void mouse (Mouseevent e) { if (e.isPopupTrigger()) { jpopup.setLocation (e.getX(), e.getY()); jpopup.setInvoker (jpopup); jpopup.setVisible (true);} } }); ' –

+0

Ihr Code funktioniert gut . Aber der Code, den ich nach dem Hinzufügen des Maus-Listeners erstellt habe, zeigt den vertikalen Balken nicht an. [** Code **] (http://i49.tinypic.com/5n9lr6.jpg). Was ist das Problem ? –

1

Ideen

  1. Borders (MatteBorders zum Beispiel) an die JMenuItem(s)

  2. hinzufügen JPanel zum JPopup

    • haben zu setzen BorderLayout für JPopup und setzen hinzufügen JPanel zu die CENTER area (und/oder mit Borders auch)

    • gesetzt BorderLayout für JPanel

    • es JSeparator auf den Bereich EAST oder WEST setzen (abhängig oder Richtung)

    • stellen eine weitere JPanel mit JButtons dass Simulieren JMenuItem (nicht auf den ersten Blick) mit Ausgabe an die Swing Action oder ActionListener

  3. die gleichen Dinge mit JWindow (I standardmäßig anstelle JPopup oder ToolTip) statt JPopup

  4. vielleicht bin ich falsch, aber JPopup sieht aus wie als chameleon

    • einmal Zeit als JPanel,

    • ein anderer als JWindow,

    • leider kein tiefste Wissen, Interesse über

Verwandte Themen