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);
42
demandé sur Andrew Thompson 2011-01-26 07:22:52

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.

67
répondu Rogach 2016-11-28 14:06:43

@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);
14
répondu ungalcrys 2012-11-20 20:54:56

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.

6
répondu donnyton 2018-01-06 13:20:04

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é ..

2
répondu Dan 2011-12-22 16:34:02
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);
        }
    }
2
répondu KFC 2013-10-18 14:29:55
//paste required image on C disk
JButton button = new JButton(new ImageIcon("C:water.bmp");
1
répondu JavaJitendra 2015-04-10 11:45:18

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);
1
répondu CamelTM 2015-05-26 11:26:14

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")));
1
répondu ParisaN 2018-03-16 15:42:04

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é.

0
répondu Oxygenium 2016-08-17 12:01:29
buttonB.setIcon(new ImageIcon(this.getClass().getResource("imagename")));
-1
répondu HeavenlySwirl 2015-07-13 07:29:54