如题!我想在控件上加图片,但是用setIcon()方法之后图不能居中,而且不能覆盖到整个图片,有人建议我用setUI()方法,但是我不懂怎么用,请大家指教,最好给段代码实例,不胜感激!

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【HoneyChenyu】截止到2008-06-24 11:45:24的历史汇总数据(不包括此帖):
    发帖数:3                  发帖分:110                
    结贴数:2                  结贴分:60                 
    未结数:1                  未结分:50                 
    结贴率:66.67 %            结分率:54.55 %            
    楼主加油
      

  2.   

    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.Insets;
    import java.awt.image.BufferedImage;import javax.imageio.ImageIO;
    import javax.swing.*;
    import javax.swing.plaf.MenuItemUI;
    import javax.swing.plaf.basic.BasicPopupMenuUI;public class BackgroundImgMenu extends JMenu
    {
        private Image bgImg;    public BackgroundImgMenu(String text, Image bgImg)
        {
            super(text);
            this.bgImg = bgImg;
        }    @Override
        public void updateUI()
        {
            setUI((MenuItemUI) UIManager.getUI(this));        if (getPopupMenu() != null)
            {
                getPopupMenu().setUI(new PopupMenuUI());
            }
        }    @Override
        public JMenuItem add(JMenuItem menuItem)
        {
            menuItem.setOpaque(false);
            return super.add(menuItem);
        }    private class PopupMenuUI extends BasicPopupMenuUI
        {
            @Override
            public void paint(Graphics g, JComponent c)
            {
                super.paint(g, c);
                Insets insets = c.getInsets();            g.drawImage(bgImg, insets.left, insets.top, c.getWidth() - insets.left - insets.right,
                    c.getHeight() - insets.top - insets.bottom, c);
            }
        }    public static void main(String[] args) throws Exception
        {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());        BufferedImage img = ImageIO.read(BackgroundImgMenu.class.getResource("menubg.png"));        JMenuBar menubar = new JMenuBar();
            JMenu fileMenu = new BackgroundImgMenu("File", img);
            JMenu editMenu = new BackgroundImgMenu("Edit", img);
            JMenu editSubMenu = new BackgroundImgMenu("SubMenu", img);        editSubMenu.add(new JMenuItem("SubMenuItem-1"));
            editSubMenu.add(new JMenuItem("SubMenuItem-2"));
            editSubMenu.add(new JMenuItem("SubMenuItem-3"));        fileMenu.add(new JMenuItem("Open"));
            fileMenu.add(new JMenuItem("Save"));
            fileMenu.add(new JCheckBoxMenuItem("CheckboxMenuItem"));
            fileMenu.add(new JRadioButtonMenuItem("RadioButtonMenuItem"));
            fileMenu.addSeparator();
            fileMenu.add(new JMenuItem("Exit"));        editMenu.add(new JMenuItem("Copy"));
            editMenu.add(new JMenuItem("Paste"));
            editMenu.add(new JMenuItem("Cut"));
            editMenu.add(editSubMenu);        menubar.add(fileMenu);
            menubar.add(editMenu);        JFrame f = new JFrame("带背景图片的菜单");
            f.setJMenuBar(menubar);
            f.setSize(400, 400);
            f.setLocationRelativeTo(null);
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.setVisible(true);
        }
    }
      

  3.   

    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.UIManager;import com.sun.java.swing.plaf.windows.WindowsButtonUI;public class TestLookAndFeel extends JFrame {    private TestButton lookAndFeelButton;    public TestLookAndFeel() {
            this.initParam();
            JPanel contentPanel = new JPanel();
            contentPanel.add(this.lookAndFeelButton);
            this.getContentPane().add(contentPanel);
        }    private void initParam() {
            this.lookAndFeelButton = new TestButton("lookAndFeelButton");
            this.lookAndFeelButton.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {
                    UIManager.getDefaults().put("ButtonUI", "ButtonUI2");
                    TestLookAndFeel.this.lookAndFeelButton.setChangeUI(true);
                    TestLookAndFeel.this.lookAndFeelButton.updateUI();
                }
            });
        }    /**
         * @param args
         */
        public static void main(String[] args) {
            TestLookAndFeel test = new TestLookAndFeel();
            test.setVisible(true);
            test.setSize(200, 200);
            test.setDefaultCloseOperation(EXIT_ON_CLOSE);
        }    class TestButton extends JButton {
            private boolean changeUI = false;        public TestButton(String string) {
                super(string);
            }        public String getUIClassID() {
                if (this.changeUI) {
                    this.changeUI = false;
                    return UIManager.getDefaults().getString("ButtonUI");
                }
                return super.getUIClassID();
            }        @Override
            public void updateUI() {
                if ("ButtonUI2".equals(getUIClassID())) {
                    this.setUI(new WindowsButtonUI());
                } else {
                    super.updateUI();
                }
            }        public void setChangeUI(boolean changeUI) {
                this.changeUI = changeUI;
            }
        }
    }