J'essaie d'ajouter une image à un bouton JButton et je ne suis pas sûr de ce qu'il me manque. Lorsque je lance le code suivant, le bouton a exactement la même apparence que si je l'avais créé sans aucun attribut d'image. Water.bmp se trouve à la racine du dossier de mon projet.
ImageIcon water = new ImageIcon("water.bmp");
JButton button = new JButton(water);
frame.add(button);
Je pense que votre problème réside dans l'emplacement de l'image. Vous allez le placer dans votre source, puis l'utiliser 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, il est supposé que l'image se trouve dans le dossier src/resources /.
@Rogach
et vous voudrez peut-être 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 car ce code convient parfaitement à l’ajout de l’icône.
Étant donné que je ne connais pas votre structure de dossier, je vous suggère d'ajouter une vérification simple:
File imageCheck = new File("water.bmp");
if(imageCheck.exists())
System.out.println("Image file found!")
else
System.out.println("Image file not found!");
Ainsi, si vous vous trompez de chemin, il vous le dira au lieu de rien afficher. Une exception devrait être levée si le fichier n’existerait pas.
Vous mettez votre image dans le dossier des ressources et utilisez le code suivant:
JButton btn = new JButton("");
btn.setIcon(new ImageIcon(Class.class.getResource("/resources/img.png")));
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);
}
}
Je n'ai fait qu'une chose et cela a fonctionné pour moi .. vérifiez votre code est cette méthode là ..
setResizable(false);
si cela est faux, cela sera vrai et cela fonctionnera très bien .. J'espère que cela vous a aidé ..
buttonB.setIcon(new ImageIcon(this.getClass().getResource("imagename")));
//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);
Par exemple, si vous avez une image dans le dossier res/image.png
tu peux é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, elle ne sera pas affichée.