web-dev-qa-db-fra.com

Comment adapter la taille de l'image à la taille JFrame?

J'ai un JPanel dans un JFrame. J'ai chargé une image sur la variable JPanel, mais elle ne montre qu'une partie de l'image: c'est la partie du code où je l'ai faite:

JPanel panelImg = new JPanel()
{
    public void paintComponent(Graphics g)
    {
        Image img = new ImageIcon("Welcome.png").getImage();
        Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));
        setPreferredSize(size);
        setMinimumSize(size);
        setMaximumSize(size);
        setSize(size);
        setLayout(null);
        g.drawImage(img, 0, 0, null);
    }
};
mainFrame.add(panelImg);

Voici comment cela se présente:

Picture 1

L'image complète ressemble à ceci:

enter image description here

Existe-t-il un moyen de redimensionner l’image à la taille JFrames? Merci d'avance

7
Jorge Chayan

Tout d'abord, je ne chargerais pas l'image dans la méthode paintComponent, cette méthode est appelée de manière répétée (et parfois rapidement), vous ne voulez rien faire qui demande du temps à s'exécuter ou qui consomme des ressources inutilement. 

Check out Java: maintien des proportions de l’image d’arrière-plan de JPanel pour des suggestions sur le remplissage/l’adaptation des images à une zone donnée

13
MadProgrammer

Vous voulez le drawImage() qui évolue vers le conteneur cible. Voir l'article cité ici pour des alternatives. Par exemple,

g.drawImage(img, 0, 0, getWidth(), getHeight(), this);
13
trashgod
import Java.awt.Graphics;
import Java.awt.Image;
import javax.swing.JPanel;

public class ImagePanel extends JPanel {

    Image image;

    public void setBackground(Image image) {
        this.image = image;
    }

    @Override
    public void paintComponent(Graphics G) {
        super.paintComponent(G);
        G.drawImage(image, 0, 0, this.getWidth(), this.getHeight(), null);
    }

}

Ensuite, utilisez la méthode d'objet ImagePanel SetBackground comme

imagePanel1.SetBackGround(ImageIO.read(new File("extensions/images/background.jpg")));
2
Bishoy Basily

C'est facile. Suivez cet exemple,

public class BasePanel extends JPanel {

ImageIcon backImage;
public BasePanel() {
    backImage = new ImageIcon("src/images/welcome.png");
}

@Override
protected void paintComponent(Graphics g) {
    BufferedImage scaledImage = getScaledImage();
    super.paintComponent(g);
    g.drawImage(scaledImage, 0, 0, null);
}

private BufferedImage getScaledImage(){
    BufferedImage image = new BufferedImage(getWidth(),getHeight(), BufferedImage.TYPE_INT_RGB);
    Graphics2D g2d = (Graphics2D) image.createGraphics();
    g2d.addRenderingHints(new RenderingHints(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_QUALITY));
    g2d.drawImage(backImage.getImage(), 0, 0,getWidth(),getHeight(), null);

    return image;
}

}
1
javatar

vous pouvez essayer ceci:

Image img = new ImageIcon(ImageIO.read(new File("welcome.png"))
                               .getScaledInstance(WIDTH, HEIGHT, Image.SCALE_SMOOTH)));
0
AvB