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:
L'image complète ressemble à ceci:
Existe-t-il un moyen de redimensionner l’image à la taille JFrame
s? Merci d'avance
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
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);
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")));
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;
}
}
vous pouvez essayer ceci:
Image img = new ImageIcon(ImageIO.read(new File("welcome.png"))
.getScaledInstance(WIDTH, HEIGHT, Image.SCALE_SMOOTH)));