web-dev-qa-db-fra.com

Comment ajouter une image à un JButton

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);
43
kevinstueber

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

70
Rogach

@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);
15
ungalcrys

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.

6
donnyton

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")));
2
ParisaN
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
KFC

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

2
Dan
buttonB.setIcon(new ImageIcon(this.getClass().getResource("imagename")));
1
HeavenlySwirl
//paste required image on C disk
JButton button = new JButton(new ImageIcon("C:water.bmp");
1
JavaJitendra

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
CamelTM

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.

0
Oxygenium