Java: utiliser une image comme bouton

Je voudrais utiliser une image en tant que bouton en Java et j’ai essayé de le faire:

BufferedImage buttonIcon = ImageIO.read(new File("buttonIconPath")); button = new JButton(new ImageIcon(buttonIcon)); 

Mais cela montre toujours le bouton derrière l’image, je voudrais seulement que l’image fonctionne comme le bouton, comment puis-je le faire?

Retirez la bordure comme suit:

 button.setBorder(BorderFactory.createEmptyBorder()); 

et puis aussi le contenu 1 :

 button.setContentAreaFilled(false); 

1 : Tiré de la solution ajoutée à la question par @ 3sdmx

Une suggestion serait de définir l’image comme une étiquette et d’append un écouteur de souris à l’étiquette pour détecter les clics.

Exemple:

 ImageIcon icon = ...; JLabel button = new JLabel(icon); button.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { ... handle the click ... } }); 

buttonIcon.setBorder (new EmptyBorder (0,0,0,0));

 button.setBorderPainted( false ); 

Cela peut être fait facilement dans netbeans en définissant la propriété contentAreaFilled sur False

  BufferedImage buttonIcon = ImageIO.read(new File("myImage.png")); button = new JButton(new ImageIcon(buttonIcon)); button.setBorderPainted(false); button.setFocusPainted(false); button.setContentAreaFilled(false); 

il suffit d’écrire ceci

 button.setContentAreaFilled(false); 

Pour autant que je sache, il n’y a pas de moyen facile de le faire, vous devrez remplacer la méthode “paintComponent” de la classe JButton pour ne pas afficher votre image, si vous voulez seulement afficher une image et vous comporter comme un bouton, vous pouvez append un JPanel qui dessine l’image ( clicky ) et ajoute un MouseListener / MouseAdapter pour gérer l’événement “mousePressed”

J’ai suivi les étapes ci-dessous et j’ai pu créer un “ImageButton” avec succès.

  1. Créer un JButton
  2. Ajout d’un écouteur d’action
  3. Définir une icône d’image (note J’ai placé l’icône info.png dans le dossier src \ main \ resources et chargée à l’aide du chargeur de classe). La structure du projet est comme ici. Structure du dossier de projet
  4. Définir une Border vide
  5. Désactiver le remplissage de la zone de contenu
  6. Désactivé la focusability
  7. Ajouté au contenuPane

PFB le code qui a fonctionné pour moi

 JButton btnNewButton = new JButton(""); btnNewButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println("Info clicked"); } }); Ssortingng iconfilePath = this.getClass().getClassLoader().getResource("info.png").getFile(); btnNewButton.setIcon(new ImageIcon(iconfilePath)); btnNewButton.setBounds(10, 438, 39, 31); btnNewButton.setBorder(BorderFactory.createEmptyBorder()); btnNewButton.setContentAreaFilled(false); btnNewButton.setFocusable(false); contentPane.add(btnNewButton); 

Le bouton de sortie résultant du code ci-dessus est comme ci-dessous

entrer la description de l'image ici