2012-09-28 13 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はい、スイングで自動的に表示されます(私の例をあなたのPCで実行しようとします)。今度は、AWT PopupMenuではなくSwing JPopupMenuを使用する必要があります。 TrayIconに直接設定することはできないので、このスニペットを使って表示させてください: 'trayIcon.addMouseListener(new MouseAdapter()) { public void mouseReleased(MouseEvent e) { if(e.isPopupTrigger()) {jpopup.setLocation(e.getX()、e.getY()); jpopup.setInvoker(jpopup); jpopup.setVisible(TRUE);} }}); ' –

+0

コードが正常に動作し。しかし、マウスリスナーを追加して作成したコードでは、縦線が表示されません。 [**コード**](http://i49.tinypic.com/5n9lr6.jpg)。何が問題ですか ? –

1

アイデア

  1. JPopup

    • JPanelJPopupためBorderLayoutを設定している追加JMenuItem(s)

    • Borders(例えばMatteBorders)を追加し、にJPanelを置きますCENTER area(および/またはあまりにBorders付き)

    • EASTまたはWESTエリア(依存または方向)へJSeparatorをそこに置かJPanel

    • ため

    • BorderLayoutを設定するには、そこにそのJButtonsを持つ別のJPanelを置きますJMenuItem(一眼で違いはない)をSwing ActionまたはActionListener

    • 012に出力してシミュレーションする
  2. 代わりJPopup

  3. JWindowと同じことが(私はデフォルトの代わりにJPopupまたはToolTipで使用して)多分私が間違っているが、JPopupはなど、時間に一度

    • chameleonなどのように見えますJPanel,

    • another as JWindow

    • 申し訳ありませんがない最も深い知識、関心を約

関連する問題