Lucas Klein
Lucas Klein

Reputation: 13

JLabel + images

I'm applying an image to a JLabel using the command .setIcon() and then adding the label to a panel

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);
}

but this doesn't resize the image inside the label, this way just a slice of the image will appear if it is bigger than the label size.

Does anyone knows a method to insert an image to a label background, resizing the image into it?

Upvotes: 1

Views: 248

Answers (3)

MadProgrammer
MadProgrammer

Reputation: 347334

Use a appropriate layout manager to take care it for you automatically. See Laying Out Components Within a Container for more details.

If, for some bizarre reason, you can't use a layout manager, then you should probably be considering a solution based around custom painting, you could make use of the components preferred size to provide it better information when settings it's bounds

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

Then, you don't need to make guesses

Upvotes: 1

CodeRunner
CodeRunner

Reputation: 687

Create a BufferedImage and get scaled instance, set its width and height to the width and height to that of the label. Now if you even resize the label, the image will cover the label.

For Example: 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); 

The following image has been scaled according to the label's width and height.

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

enter image description here

Upvotes: 2

wadda_wadda
wadda_wadda

Reputation: 1004

Here's a method I wrote some years back to resize an image in 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));
}

Upvotes: 1

Related Questions