setIcon(new ImageIcon())
要跟随JLabel的大小变,要用2D画了

解决方案 »

  1.   

    好像有一个方法图片可以得到图片的大小
    然后再调用setSize()方法
    最后再刷新一下validate()
      

  2.   

    import java.awt.*;
    import java.awt.BorderLayout;
    import java.awt.Component;
    import java.awt.Graphics;
    import java.awt.Graphics2D;import javax.swing.Icon;
    import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    import javax.swing.JLabel;public class MIcon implements Icon {
        private Icon icon = null;    public MIcon(Icon icon) {
            this.icon = icon;
        }    public int getIconHeight() {
            return icon.getIconHeight();
        }    public int getIconWidth() {
            return icon.getIconWidth();
        }    public void paintIcon(Component c, Graphics g, int x, int y) {
            float wid = c.getWidth();
            float hei = c.getHeight();
            int iconWid = icon.getIconWidth();
            int iconHei = icon.getIconHeight();        Graphics2D g2d = (Graphics2D) g;
            g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, 
                RenderingHints.VALUE_INTERPOLATION_BILINEAR);
            g2d.scale(wid/iconWid, hei/iconHei);
            icon.paintIcon(c, g2d, 0, 0);
        }    public static void main(String[] args) {
            MIcon icon = new MIcon(new ImageIcon("test.gif"));
            JLabel label = new JLabel(icon);
            JFrame frame = new JFrame();
            frame.getContentPane().add(label, BorderLayout.CENTER);
            frame.setSize(800, 600);
            frame.setLocationRelativeTo(null);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
        }
    }