50 votes

Comment ajouter une image à un JButton

Je suis en train d'essayer d'ajouter une image à un JButton et je ne suis pas sûr de ce qui me manque. Lorsque j'exécute le code suivant, le bouton ressemble exactement à s'il avait été créé sans aucun attribut d'image. Water.bmp se trouve à la racine de mon dossier de projet.

ImageIcon water = new ImageIcon("water.bmp");
    JButton button = new JButton(water);
    frame.add(button);

0 votes

Cela devrait fonctionner... pouvez-vous essayer d'utiliser la forme URL du constructeur ImageIcon et voir ce que cela donne ? Il se peut qu'il ne trouve pas le fichier image pour une raison quelconque.

0 votes

Oui, ça fonctionne maintenant. Aucun changement de code. Merci à tous pour vos suggestions.

79voto

Rogach Points 6717

Je pense que votre problème se situe dans l'emplacement de l'image. Vous devez la 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 est dans le dossier src/resources/.

3 votes

Je ne sais pas pourquoi, mais cela n'a pas fonctionné pour moi non plus. J'ai même créé une fonction qui cherchait les fichiers voulus dans le répertoire et les trouvait - toujours pas d'icônes. Ainsi, j'utilise simplement la ligne : button1.setIcon("chemin/image.png"); - cela fonctionne. Des idées pourquoi?

18voto

ungalcrys Points 149

@Rogach

et vous pouvez aimer ajouter:

// pour supprimer l'espace entre l'image et les bordures du bouton
button.setMargin(new Insets(0, 0, 0, 0));
// pour ajouter un arrière-plan différent
button.setBackground( ... );
// pour supprimer la bordure
button.setBorder(null);

7voto

donnyton Points 1886

Il semble que ce soit un problème d'emplacement car ce code est parfaitement adapté pour ajouter l'icône.

Comme je ne connais pas la structure de vos dossiers, je suggère d'ajouter une simple vérification :

Fichier imageCheck = new File("water.bmp");

if(imageCheck.exists()) 
    System.out.println("Fichier image trouvé!")
else 
    System.out.println("Fichier image non trouvé!");

De cette façon, si jamais votre chemin d'accès est incorrect, il vous le dira au lieu de ne rien afficher. Une exception devrait être levée si le fichier n'existe pas, cependant.

6voto

ParisaN Points 261

Vous placez 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")));

3voto

KFC Points 96
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);
        }
    }

6 votes

Trop complexe. Il existe un mécanisme intégré pour ajouter des icônes aux boutons, pourquoi créer des problèmes supplémentaires?

0 votes

@Rogach Pas spécifiquement pour cette question, mais dans mon cas, il était utile d'avoir un contrôle supplémentaire sur l'endroit où l'image était placée dans le bouton.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X