Comment ajouter une image à un JButton
j'essaie d'ajouter une image à un JButton et je ne suis pas sûr de ce que je manque. Quand j'exécute le code suivant le bouton regarde exactement le même comme si je l'avais créé sans aucun attribut d'image. Eau.bmp est dans la racine de mon dossier de projet.
ImageIcon water = new ImageIcon("water.bmp");
JButton button = new JButton(water);
frame.add(button);
10 réponses
je pense que votre problème est dans l'emplacement de l'image. Vous le placerez dans votre source, puis l'utiliserez comme ceci:
JButton button = new JButton();
try {
Image img = ImageIO.read(getClass().getResource("resources/water.bmp"));
button.setIcon(new ImageIcon(img));
} catch (Exception ex) {
System.out.println(ex);
}
dans cet exemple, on suppose que l'image est dans src/resources/ folder.
@Lucane
et comme vous pouvez ajouter:
// to remote the spacing between the image and button's borders
button.setMargin(new Insets(0, 0, 0, 0));
// to add a different background
button.setBackground( ... );
// to remove the border
button.setBorder(null);
cela ressemble à un problème d'emplacement parce que ce code est parfaitement bien pour ajouter l'icône.
comme je ne connais pas la structure de votre dossier, je suggère d'ajouter une simple vérification:
File imageCheck = new File("water.bmp");
if(imageCheck.exists())
System.out.println("Image file found!")
else
System.out.println("Image file not found!");
de cette façon, si vous vous trompez sur le nom de votre chemin, il vous le dira au lieu de ne rien afficher. Exception devrait être jeté si le fichier n'existerait pas, tho.
Je n'ai fait qu'une chose et ça a marché pour moi .. vérifiez votre code est cette méthode là ..
setResizable(false);
si il faux le faire et il fonctionne très bien .. J'espère que cela a aidé ..
public class ImageButton extends JButton {
protected ImageButton(){
}
@Override
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
Image img = Toolkit.getDefaultToolkit().getImage("water.bmp");
g2.drawImage(img, 45, 35, this);
g2.finalize();
}
}
ou utilisez ce code
class MyButton extends JButton {
Image image;
ImageObserver imageObserver;
MyButtonl(String filename) {
super();
ImageIcon icon = new ImageIcon(filename);
image = icon.getImage();
imageObserver = icon.getImageObserver();
}
public void paint( Graphics g ) {
super.paint( g );
g.drawImage(image, 0 , 0 , getWidth() , getHeight() , imageObserver);
}
}
//paste required image on C disk
JButton button = new JButton(new ImageIcon("C:water.bmp");
Ce code fonctionne pour moi:
BufferedImage image = null;
try {
URL file = getClass().getResource("water.bmp");
image = ImageIO.read(file);
} catch (IOException ioex) {
System.err.println("load error: " + ioex.getMessage());
}
ImageIcon icon = new ImageIcon(image);
JButton quitButton = new JButton(icon);
vous mettez votre image dans le dossier Ressources et utilisez le code suivant:
JButton btn = new JButton("");
btn.setIcon(new ImageIcon(Class.class.getResource("/resources/img.png")));
par exemple si vous avez l'image dans le dossier res/image.png
vous pouvez écrire:
try
{
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream input = classLoader.getResourceAsStream("image.png");
// URL input = classLoader.getResource("image.png"); // <-- You can use URL class too.
BufferedImage image = ImageIO.read(input);
button.setIcon(new ImageIcon(image));
}
catch(IOException e)
{
e.printStackTrace();
}
en une ligne:
try
{
button.setIcon(new ImageIcon(ImageIO.read(Thread.currentThread().getContextClassLoader().getResourceAsStream("image.png"))));
}
catch(IOException e)
{
e.printStackTrace();
}
Si l'image est plus grande que le bouton il ne sera pas montré.
buttonB.setIcon(new ImageIcon(this.getClass().getResource("imagename")));