Java 在jLabel上重新调整图像大小

Java 在jLabel上重新调整图像大小,java,image,resize,jlabel,autoresize,Java,Image,Resize,Jlabel,Autoresize,我试图在java中的jLabel上重新调整图像的大小,下面给出了不起作用的代码片段: ImageIcon imgThisImg = new ImageIcon(rs.getString("PictureURL")); Image image=null; image=jLabel2.createImage(120, 50); ImageIcon imi=new ImageIcon(image); jLabel2.setIcon(imi); 当我运行它时,我的jlabel上什么也没有。事实上,如果

我试图在java中的jLabel上重新调整图像的大小,下面给出了不起作用的代码片段:

ImageIcon imgThisImg = new ImageIcon(rs.getString("PictureURL"));
Image image=null;
image=jLabel2.createImage(120, 50);
ImageIcon imi=new ImageIcon(image);
jLabel2.setIcon(imi);
当我运行它时,我的jlabel上什么也没有。事实上,如果我运行下面的代码,它可以正常工作。问题是我想要一个缩小的图像:

ImageIcon imgThisImg = new ImageIcon(rs.getString("PictureURL"));
jLabel2.setIcon(imgThisImg);                          
我找不到我错在哪里。请给我一些建议,我该怎么做


谢谢

请参阅下面一个更好的图像缩放解决方案。在下面的代码中,
newImage
是重新缩放的图像

BufferedImage image = ImageIO.read(imageFile);
BufferedImage newImage = new BufferedImage(newWidth, newHeight, image.getType());
Graphics2D g2 = newImage.createGraphics();
g2.drawImage(image, 0, 0, newWidth, newHeight, null);
g2.dispose();

下面是一个渲染组件的代码,可能会给您一些提示

class PaintCommandListCellRenderer extends DefaultListCellRenderer {

    @Override
    public Component getListCellRendererComponent(
            JList list, 
            Object value,
            int index, 
            boolean isSelected, 
            boolean hasFocus) {
        Component c = super.getListCellRendererComponent(list, value, index, isSelected, hasFocus);
        if (c instanceof JLabel && value instanceof PaintCommand) {
            JLabel l = (JLabel)c; 
            PaintCommand pc = (PaintCommand)value;
            try {
                BufferedImage bi = pc.getUndoImage();
                double w = bi.getWidth();
                double ideal = 200d;
                double ratio = w/ideal;
                int aw = (int)(w/ratio);
                int ah = (int)(bi.getHeight()/ratio);
                BufferedImage bj = new BufferedImage(
                        aw,ah,BufferedImage.TYPE_INT_ARGB);
                Graphics2D g = bj.createGraphics();
                g.drawImage(bi, 0, 0, aw, ah, null);
                g.dispose();
                l.setIcon(new ImageIcon(bj));
                l.setText("");
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return c;
    }
}

你可以试着看一看