2012-09-28 16 views
7

Jak dodać pionowy separator w wyskakującym menu aplikacji na pasku zadań?Dodawanie pionowego separatora w PopupMenu, na pasku zadań

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

Oświadczenie menu.addSeparator() dodaje poziomy separator. Chciałem też pionowy separator jak:

enter image description here

Jak to zrobić?

+1

pojęcia, tylko +1 do ciekawej kwestii – mKorbel

Odpowiedz

6

Prostym Sztuką jest, aby dodać pustą ikonę do JMenuItem.Wygląd i następnie dodaje pionowy separator szukasz (oczywiście, to działa tylko w systemie Windows L & F, inne L & F może czynią to inaczej):

Menu example result

a kod produkowane go:

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

nie rozumiem you..You znaczy pionowy separator zostanie dodany na własną rękę? Próbowałem tego, ale bez rezultatu. [kod dodatku] (http://i46.tinypic.com/2ia7evm.jpg) ** & ** [kod wyglądu] (http://i47.tinypic.com/2zjlyxz.jpg) –

+0

@SuhailGupta Tak, w Swing pojawia się automatycznie (spróbuj uruchomić mój przykład na twoim komputerze). Teraz musisz użyć Swing JPopupMenu, a nie menu podręcznego AWT. Ponieważ nie można ustawić go na TrayIcon bezpośrednio, należy użyć tego fragmentu kodu, aby go wyświetlić: 'trayIcon.addMouseListener (nowy MouseAdapter() { public void mouseReleased (MouseEvent e) { if (e.isPopupTrigger()) { jpopup.setLocation (e.getX(), e.getY()); jpopup.setInvoker (jpopup); jpopup.setVisible (true); } } }); ' –

+0

Twój kod działa poprawnie . Ale kod, który stworzyłem po dodaniu nasłuchu myszy, nie pokazuje pionowego paska. [** code **] (http://i49.tinypic.com/5n9lr6.jpg). Jaki jest problem ? –

1

pomysły

  1. dodać Borders (MatteBorders na przykład) do JMenuItem(s)

  2. dodać JPanel do JPopup

    • trzeba ustawić BorderLayout dla JPopup i umieścić JPanel do CENTER area (i/lub z Borders zbyt)

    • ustawić BorderLayout dla JPanel

    • tam umieścić JSeparator do obszaru EAST lub WEST (zależy czy kierunek)

    • umieścić tam kolejny JPanel z JButtons że symulowanie JMenuItem (bez różnicy w pierwszym podejściu) z wyjściem do Swing Action lub ActionListener

  3. te same rzeczy z JWindow (I używając domyślnie zamiast JPopup lub ToolTip) zamiast JPopup

  4. może się mylę, ale wygląda jak JPopupchameleon

    • po czasie JPanel,

    • kolejny jako JWindow,

    • Niestety nie najgłębsza wiedza, zainteresowanie o

Powiązane problemy