什么时候结束这个paintIcon递归?看不出来

解决方案 »

  1.   


    原来是这个原因
    应该是icon.paintIcon(c, g2d, x, y);感谢大哥!!!还有个问题,运行的时候并没有缩放成功,是什么原因呢 JPanel panel_1 = new JPanel();
    frame.getContentPane().add(panel_1);
    JLabel lblNewLabel = new JLabel("New label");
    ScaleIcon ii = new ScaleIcon(new ImageIcon(JLoginWindow.class.getResource("/img/\u6EE1\u6C49\u5168\u5E2D.jpg")));
    lblNewLabel.setIcon(ii);
    panel_1.setSize(200, 100);
    lblNewLabel.setSize(200, 100);
    panel_1.add(lblNewLabel);
      

  2.   

    上面的代码,在调试的时候,到了ScaleIcon的paint方法里的时候,发现获取到的C的尺寸并不是我设置的200,100,还是和我的图片尺寸大小一样·~
      

  3.   


    是不是先设置的图片,后设置c的大小,顺序倒了吧?
    我现在改了下代码,不把尺寸设死,用了布局管理器,让组件能跟随窗体变化,现在没有设置组件尺寸的地方了,缩放还是不行把代码贴全 JPanel panelImage = new JPanel();
    GridBagConstraints gbc_panelImage = new GridBagConstraints();
    gbc_panelImage.gridheight = 2;
    gbc_panelImage.insets = new Insets(0, 0, 0, 5);
    gbc_panelImage.fill = GridBagConstraints.BOTH;
    gbc_panelImage.anchor = GridBagConstraints.WEST;
    gbc_panelImage.gridx = 0;
    gbc_panelImage.gridy = 0;
    frame.getContentPane().add(panelImage, gbc_panelImage); JLabel labelImage = new JLabel("");
    ScaleIcon icon = new ScaleIcon(new ImageIcon(
    JLoginWindow.class
    .getResource("/img/\u6EE1\u6C49\u5168\u5E2D.jpg")));
    labelImage.setIcon(icon);
    panelImage.add(labelImage);
    labelImage.setBorder(BorderFactory.createLineBorder(Color.red));我刚刚加了最后一句,把边框显示出来,发现边框显示不全,好像是被图片“撑大了”的感觉。
      

  4.   

    import java.awt.Image;import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    import javax.swing.JLabel;public class Test25 extends JFrame { public Test25() {
    int width = 100;
    int height = 100;
    ImageIcon image = new ImageIcon("c:\\d.png");
    image.setImage(image.getImage().getScaledInstance(width, height,
    Image.SCALE_DEFAULT));
    JLabel label = new JLabel(image);
    getContentPane().add(label);
    setBounds(100, 100, 200, 200);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setVisible(true);
    } public static void main(String[] args) {
    new Test25();
    }
    }
      

  5.   

    非常感谢,只是这里的getScaledInstance中的宽高都是固定的,我试了下改成获取Panel或者label的宽高都是0,
    看来其尺寸是运行时才确定的。
    那这里有没有什么办法解决这个问题?