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