我设置了一个JLabel,放置图片,但是图片尺寸太大,怎样让它适合组件大小?

解决方案 »

  1.   

    想一想 一般应该是调整组件 适合 图像大小 或者 把图像做小 适合 组件大小 还有就是 图片是固定大小的 你不是在做 缩放 图片的功能 只是在一个Icon上放入JLabel
      

  2.   

    想调整图片大小,当然是可以的,先获得你的JLabel的大小
    然后用BufferedImage对图片进行缩放变换之后再设置到JLabel上
    你可以用这个方法试试:
    /**
     * 将指定的BufferedImage,缩放为{width,height}的大小,并返回一个新的BufferedImage
     * @param bufImage
     * @param width
     * @param height
     * @return
     */
    public static BufferedImage resizeBuff(BufferedImage bufImage, int width, int height) {
    AffineTransform transform = AffineTransform.getScaleInstance(
    (double)width/(double)bufImage.getWidth(), 
    (double)height/(double)bufImage.getHeight());
    AffineTransformOp op = new AffineTransformOp(transform, 
    AffineTransformOp.TYPE_BILINEAR);
    return op.filter(bufImage, null);
    }
      

  3.   

    不过要注意的一点是,java对图片缩放处理时,都会出现或多或少的失真
    我给的这个方式,已经是我知道的失真最小的方式了,
    但是依然没有专业的图片编辑软件处理的效果好
    另外一点就是BufferedImage有点耗资源,不过图片不大的话也无所谓了
      

  4.   

    可以使用 Image中的 getScaledInstance方法将图标重新设置尺寸.再加入到控件中.这样就能在让图标根据控件的大小并完全显示在控件中了.一下是一个给Swing按钮增加自适应图标的方法 public void setIcon(String file,JButton com){
            ImageIcon ico=new ImageIcon(file);
            Image temp=ico.getImage().getScaledInstance(com.getWidth(),com.getHeight(),ico.getImage().SCALE_DEFAULT);
            ico=new ImageIcon(temp);
            com.setIcon(ico);
        }
      

  5.   


    可以将JButton 换成任何支持图标的控件
      

  6.   

    getScaledInstance的方式比用bufferedImage处理失真度要高一些
    但是如果不追求这么一点清晰度的话,其实也无所谓
    真正追求图片展现的完美,还是应该用图片编辑软件处理成预期大小,不要用java来缩放