2012-09-28 4 views
7

Как добавить вертикальный разделитель во всплывающем меню приложения на панели задач?Добавление вертикального разделителя в PopupMenu на панели задач

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

В заявлении menu.addSeparator() добавлен горизонтальный разделитель. Я также хотел вертикальный разделитель, как:

enter image description here

Как это сделать?

+1

никакой идеи, только +1 за интересный вопрос – mKorbel

ответ

6

Один простого трюк, чтобы добавить пустую иконку в JMenuItem.Внешний вид и затем добавляет вертикальный разделитель, который вы ищете (конечно, это работает только с Windows, L & F, другие L & F может сделать это по-разному):

Menu example result

И код, произвел его:

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

я не понимаю you..You означаю, вертикальный разделитель будет добавлен сам по себе? Я пробовал это, но ничего не получилось. [код добавления] (http://i46.tinypic.com/2ia7evm.jpg) ** и ** [код внешнего вида] (http://i47.tinypic.com/2zjlyxz.jpg) –

+0

@SuhailGupta Да, в Swing оно появляется автоматически (попробуйте запустить мой пример на вашем ПК). Теперь вам нужно использовать Swing JPopupMenu, а не AWT PopupMenu. Так как вы не можете установить его на TrayIcon непосредственно, используйте этот фрагмент кода, чтобы сделать вид: 'trayIcon.addMouseListener (новый MouseAdapter() { общественного недействительными mouseReleased (MouseEvent е) { если (e.isPopupTrigger()) { jpopup.setLocation (e.getX(), e.getY()); jpopup.setInvoker (jpopup); jpopup.setVisible (истина); }} }); ' –

+0

Ваш код работает отлично , Но код, который я сделал после добавления слушателя мыши, не показывает вертикальную полосу. [** код **] (http://i49.tinypic.com/5n9lr6.jpg). В чем проблема ? –

1

идеи

  1. Borders добавить (MatteBorders, например) к JMenuItem(s)

  2. добавить JPanel к JPopup

    • должны установить BorderLayout для JPopup и положить JPanel в CENTER area (и/или с Borders тоже)

    • установить BorderLayout для JPanel

    • там поместить JSeparator в область EAST или WEST (в зависимости или направление)

    • положить туда другой JPanel с JButtons, что моделирование JMenuItem (не отличается от первого взгляда) с выходом на Swing Action или ActionListener

  3. одни и те же вещи с JWindow (я, используя по умолчанию вместо JPopup или ToolTip) вместо JPopup

  4. может быть, я ошибаюсь, но JPopup выглядит, как chameleon

    • однажды время, JPanel,

    • другой как JWindow,

    • К сожалению нет глубочайшего знания, интерес о