JLabel +图像

时间:2015-10-25 05:02:54

标签: java image swing icons jlabel

我使用命令.setIcon()将图像应用于JLabel,然后将标签添加到面板

public browser() throws IOException {
 JLabel lblimg;
 Image img;
 ImageIcon ico;
 img = ImageIO.read(new File("<FilePath>"));
 ico = new ImageIcon(img);
 lblimg.setIcon(ico);
 lblimg.setBounds(300,90,120,120);
 add(lblimg);
}

但是这并没有调整标签内的图像大小,这样只要图像大于标签尺寸,就会出现一片图像。

有没有人知道将图像插入标签背景,将图像大小调整到其中的方法?

3 个答案:

答案 0 :(得分:2)

创建一个BufferedImage并获取缩放实例,将其宽度和高度设置为与标签宽度和高度相同的宽度和高度。现在,如果您甚至调整标签大小,图像将覆盖标签。

例如:lblimg.setBounds(300, 90, 300, 120);

BufferedImage bimg =ImageIO.read(new File("file path"));
        ico = new ImageIcon(bimg.getScaledInstance(lblimg.getWidth(), lblimg.getHeight(), Image.SCALE_SMOOTH));
        lblimg.setIcon(ico); 

以下图片已根据标签的宽度和高度进行缩放。

lblimg.setBounds(300, 90, 100, 50);

enter image description here

答案 1 :(得分:1)

这是我几年前写的用Java调整图像大小的方法。

public ImageIcon picturePrep(ImageIcon icon) {
    final int DESIRED_WIDTH = 880;
    double imageWidth = icon.getIconWidth();
    int imageHeight = icon.getIconHeight();
    imageWidth = DESIRED_WIDTH/imageWidth;
    imageHeight = (int) (imageWidth * imageHeight);
    Image img = icon.getImage();
    return new ImageIcon(img.getScaledInstance(DESIRED_WIDTH, imageHeight, Image.SCALE_SMOOTH));
}

答案 2 :(得分:1)

使用适当的布局管理器自动处理它。有关详细信息,请参阅Laying Out Components Within a Container

如果由于某些奇怪的原因,您无法使用布局管理器,那么您可能应该考虑基于自定义绘制的解决方案,您可以使用组件首选大小,以便在设置边界时提供更好的信息

BufferedImage img = ImageIO.read(new File("<FilePath>"));
JLabel lblimg = new JLabel(new ImageIcon(img));
lblimg.setBounds(new Rectangle(new Point(300, 90), lblimg.getPreferredSize()));

然后,你不需要猜测