web-dev-qa-db-fra.com

Définir l'icône de l'image en Java

Je cherchais partout comment définir l’image d’icône en Java et cela finissait toujours par ne pas fonctionner ou par me donner des erreurs. Ici, dans ma méthode principale, je mets le code:

public static void main(String[] args) {
    Game game = new Game();

    // This right here! 
    game.frame.setIconImage(new ImageIcon("/Icon.png").getImage());

    game.frame.setResizable(false);
    game.frame.setTitle(title);
    game.frame.add(game);
    game.frame.pack();
    game.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    game.frame.setLocationRelativeTo(null);
    game.frame.setVisible(true);

}

Mon chemin d'accès à l'image est "% PROJECT%/res/Image.png" et j'utilise simplement /Image.png pour accéder à mon dossier res (comme je l'ai fait dans d'autres parties de mon projet). Je l'ai même converti. dans un fichier d'icône, et essayé cela, mais tout ce qu'il décide est d'utiliser l'icône par défaut de Java.

9
Shzylo

Votre problème est souvent dû à la recherche de l'image au mauvais endroit, ou si vos classes et images sont dans un fichier JAR, puis à la recherche de fichiers dans lesquels les fichiers n'existent pas. Je suggère que vous utilisiez des ressources pour vous débarrasser du deuxième problème.

par exemple.,

// the path must be relative to your *class* files
String imagePath = "res/Image.png";
InputStream imgStream = Game.class.getResourceAsStream(imagePath );
BufferedImage myImg = ImageIO.read(imgStream);
// ImageIcon icon = new ImageIcon(myImg);

// use icon here
game.frame.setIconImage(myImg);

Utiliser la boîte à outils par défaut pour cela

frame.setIconImage(Toolkit.getDefaultToolkit().getImage("Icon.png"));
8
Jayram Singh

J'utilise ceci:

import javax.imageio.ImageIO;
import Java.awt.*;
import Java.awt.image.BufferedImage;
import Java.io.IOException;
import Java.io.InputStream;

public class IconImageUtilities
{
    public static void setIconImage(Window window)
    {
        try
        {
            InputStream imageInputStream = window.getClass().getResourceAsStream("/Icon.png");
            BufferedImage bufferedImage = ImageIO.read(imageInputStream);
            window.setIconImage(bufferedImage);
        } catch (IOException exception)
        {
            exception.printStackTrace();
        }
    }
}

Placez simplement votre image appelée Icon.png dans le dossier des ressources et appelez la méthode ci-dessus avec lui-même en tant que paramètre dans une classe étendant une classe à partir de la famille Window telle que JFrame ou JDialog:

IconImageUtilities.setIconImage(this);
1
BullyWiiPlaza