2012-09-28 24 views
7

¿Cómo puedo agregar un separador vertical en el menú emergente de la aplicación en la barra de tareas?Agregar un separador vertical en PopupMenu, en la barra de tareas

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); 

La declaración menu.addSeparator() agrega un separador horizontal. También quería un separador vertical como:

enter image description here

¿Cómo se hace esto?

+1

ni idea, sólo el 1 por pregunta interesante – mKorbel

Respuesta

6

Un truco fácil es añadir un icono vacío a la JMenuItem.La apariencia continuación, añade el separador vertical, que busca (por supuesto, esto sólo funciona con Windows L & M, otro L & F puede hacer esto de manera diferente):

Menu example result

Y el código que producido:

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

no entiendo you..You decir separador vertical se añadió por su cuenta? Intenté esto aunque sin resultado. [código de adición] (http://i46.tinypic.com/2ia7evm.jpg) ** & ** [código de apariencia] (http://i47.tinypic.com/2zjlyxz.jpg) –

+0

@SuhailGupta Sí, en Swing aparece automáticamente (intente ejecutar mi ejemplo en su PC). Ahora, necesita usar un Swing JPopupMenu y no el AWT PopupMenu. Dado que no se puede establecer que en el TrayIcon directamente, utilice este fragmento para que parezca: 'trayIcon.addMouseListener (nueva MouseAdapter() { public void mouseReleased (MouseEvent e) { si (e.isPopupTrigger()) { jpopup.setLocation (e.getX(), e.getY()); jpopup.setInvoker (jpopup); jpopup.setVisible (true); }} }); ' –

+0

Su código funciona bien . Pero el código que hice después de agregar el detector de mouse no muestra la barra vertical. [** código **] (http://i49.tinypic.com/5n9lr6.jpg). Cuál es el problema ? –

1

las ideas

  1. añadir Borders (MatteBorders por ejemplo) a la JMenuItem(s)

  2. añadir JPanel a la JPopup

    • han de establecer BorderLayout para JPopup y poner a JPanel la CENTER area (y/o con Borders también)

    • conjunto BorderLayout para JPanel

    • allí poner JSeparator a la zona de EAST o WEST (depende o dirección)

    • puso en su lugar otro JPanel con JButtons que simulando JMenuItem (no es diferente a primera vista) con salida a Swing Action o ActionListener

  3. las mismas cosas con JWindow (I utilizando por defecto en lugar JPopup o ToolTip) en lugar de JPopup

  4. tal vez me equivoque, pero parece que JPopup como chameleon

    • tiempo que una vez JPanel,

    • otro como JWindow,

    • ningún conocimiento más profundo lo siento, el interés sobre

Cuestiones relacionadas