web-dev-qa-db-fra.com

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 réel derrière l'image, je voudrais seulement que l'image fonctionne comme un bouton, comment puis-je faire cela?

52
3sdmx

Supprimez la bordure comme suit:

button.setBorder(BorderFactory.createEmptyBorder());

et puis aussi le contenu1:

button.setContentAreaFilled(false);

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

27
jzd

Une suggestion serait de définir l'image en tant qu'étiquette et d'ajouter 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 ...
  }
});
9
thotheolh
    BufferedImage buttonIcon = ImageIO.read(new File("myImage.png"));
    button = new JButton(new ImageIcon(buttonIcon));
    button.setBorderPainted(false);
    button.setFocusPainted(false);
    button.setContentAreaFilled(false);
1
Vladimir

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

1
StanislavL

écris juste ceci

button.setContentAreaFilled(false);
1
Adham Gamal
button.setBorderPainted( false );
1
camickr

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

1
unleashed

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

  1. Créer une JButton
  2. Ajout d'un auditeur d'action
  3. Définissez une icône d'image (remarque: j'ai placé l'icône info.png dans le dossier src\main\resources et chargé à l'aide du chargeur de classes). La structure du projet est la suivante.  Project folder structure
  4. Définir une Border vide
  5. Désactiver le remplissage de la zone de contenu
  6. Désactivé la mise au point
  7. Ajouté au contentPane 

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");
    }
});

String 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

 enter image description here

0
sunil

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 ajouter un JPanel qui dessine l'image ( clicky ) et ajoute un MouseListener/MouseAdapter pour gérer l'événement "mousePressed"

0
Harima555