问题
How can I add a vertical separator in the pop up menu of the app in the task bar ?
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);
The statement menu.addSeparator()
adds a horizontal separator. I also wanted a vertical separator like :
How do I do this ?
回答1:
One easy trick is to add an empty icon to the JMenuItem. The look and feel then adds the vertical separator you are looking for (of course, this only works with the Windows L&F, other L&F may render this differently):
And the code that produced it:
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();
}
});
}
}
回答2:
ideas
add
Borders
(MatteBorders
for example) to theJMenuItem(s)
add
JPanel
to theJPopup
have to set
BorderLayout
forJPopup
and putJPanel
to theCENTER area
(and/or withBorders
too)set
BorderLayout
forJPanel
there put
JSeparator
to theEAST
orWEST
area (depends or direction)put there another
JPanel
withJButtons
that simulatingJMenuItem
(doesn't difrerence on 1st sight) with output to theSwing Action
orActionListener
the same things with
JWindow
(I using by default insteadJPopup
orToolTip
) instead ofJPopup
maybe I'm wrong but
JPopup
looks like as chameleononce time as
JPanel
,another as
JWindow
,sorry no deepest knowledge, interest about
来源:https://stackoverflow.com/questions/12638845/adding-a-vertical-separator-in-popupmenu-in-the-task-bar