7

タスクバーのアプリのポップアップメニューに垂直セパレーターを追加するにはどうすればよいですか?

   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()は、水平セパレーターを追加します。次のような垂直セパレータも必要でした:

ここに画像の説明を入力

これを行うにはどうすればよいですか?

4

2 に答える 2

6

簡単な方法の 1 つは、空のアイコンを JMenuItem に追加することです。次に、ルック アンド フィールによって、探している垂直区切りが追加されます (もちろん、これは Windows L&F でのみ機能し、他の L&F ではこれが異なる方法でレンダリングされる場合があります)。

メニュー例 結果

そして、それを生成したコード:

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

}
于 2012-09-28T12:55:31.310 に答える
1

アイデア

  1. Bordersに(MatteBordersたとえば)追加しますJMenuItem(s)

  2. JPanelに追加JPopup

    • (および/またはあまりにも)のために設定BorderLayoutJPopupて置くJPanel必要がありますCENTER areaBorders

    • BorderLayoutのために設定JPanel

    • またはエリアに配置JSeparatorされます(または方向に依存します)EASTWEST

    • またはJPanel_ JButtons_ JMenuItem_ Swing Action_ActionListener

  3. 同じことJWindow(代わりにデフォルトで使用するJPopupToolTip) の代わりにJPopup

  4. 私が間違っているかもしれませんが、カメレオンJPopupのように見えます

    • 一度としてJPanel

    • 別としてJWindow

    • 申し訳ありませんが、深い知識はありません。

于 2012-09-28T11:41:10.103 に答える