[java]代码库
public class CustomPopupMenuUI extends BasicPopupMenuUI {
public static ComponentUI createUI(JComponent c) {
return new CustomPopupMenuUI();
}
public Popup getPopup(JPopupMenu popup, int x, int y) {
Popup pp = super.getPopup(popup,x,y);
JPanel panel = (JPanel)popup.getParent();
panel.setBorder(new ShadowBorder(3,3));
panel.setOpaque(false);
return pp;
}
}
class ShadowBorder extends AbstractBorder {
int xoff, yoff;
Insets insets;
public ShadowBorder(int x, int y) {
this.xoff = x;
this.yoff = y;
insets = new Insets(0,0,xoff,yoff);
}
public Insets getBorderInsets( Component c ) {
return insets;
}
public void paintBorder(Component comp, Graphics g,
int x, int y, int width, int height) {
g.setColor(Color.black);
g.translate(x,y);
// draw right side
g.fillRect(width-xoff, yoff, xoff, height-yoff);
// draw bottom side
g.fillRect(xoff, height-yoff, width-xoff, yoff);
g.translate(-x,-y);
}
}
public class MenuTest {
public static void main(String[] args) throws Exception {
UIManager.put("PopupMenuUI","CustomPopupMenuUI");
JFrame frame = new JFrame();
JMenuBar mb = new JMenuBar();
frame.setJMenuBar(mb);
JMenu menu = new JMenu("File");
mb.add(menu);
menu.add(new JMenuItem("Open"));
menu.add(new JMenuItem("Save"));
menu.add(new JMenuItem("Close"));
menu.add(new JMenuItem("Exit"));
menu = new JMenu("Edit");
mb.add(menu);
menu.add(new JMenuItem("Cut"));
menu.add(new JMenuItem("Copy"));
menu.add(new JMenuItem("Paste"));
menu.add(new JMenuItem("Paste Special.."));
frame.getContentPane().setLayout(new BorderLayout());
frame.getContentPane().add("North",new JButton("Button"));
frame.getContentPane().add("Center",new JLabel("a label"));
frame.getContentPane().add("South",new JCheckBox("checkbox"));
frame.pack();
frame.setSize(200,150);
frame.show();
}
}
//源代码片段来自云代码http://yuncode.net