Comment mettre une image sur un JButton?
Je suis en train d'écrire un programme qui requiert j'ai un bouton avec une image sur le dessus de cela, cependant, jusqu'à présent, je n'ai pas été en mesure de l'obtenir pour fonctionner. J'ai vérifié plusieurs autres messages sur ce site, y compris Comment puis-je ajouter une image à un JButton.
Mon Code:
public class Tester extends JFrame
{
public Tester()
{
JPanel panel = new JPanel();
getContentPane().add(panel);
panel.setLayout(null);
setTitle("Image Test");
setSize(300,300);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
JButton button = new JButton();
try
{
Image img = ImageIO.read(getClass().getResource("Images\\BBishopB.gif"));
button.setIcon(new ImageIcon(img));
}
catch (IOException ex) {}
button.setBounds(100,100,100,100);
panel.add(button);
}
public static void main(String[] args)
{
Tester test = new Tester();
test.setVisible(true);
}
}
Lors de l'exécution de ce code provoque une erreur: Exception in thread "main" java.lang.IllegalArgumentException: entrée == null! Cette erreur se produit à la ligne:
Image img = ImageIO.read(getClass().getResource("Images\\BBishopB.gif"));
Je ne pense pas que cette erreur est due pour le fichier n'est pas trouvé par le code de java, comme mon dossier d'Images est dans le dossier src (je suis à l'aide d'Eclipse) comme recommandé par le lien ci-dessus.
Quelqu'un a une idée de ce que le problème peut être?
Merci.
Avez-vous réellement vérifié la valeur de retour de
getResource()
?C'est le chemin de l'image: C:\Documents and Settings\étudiant\Mes Documents\Dropbox\ADVCS_Workspace\Chess_Program\src\Images
n'a pas vraiment d'importance, où l'image est situé. Ce qui importe est où l'image se trouve relativement au fichier de classe correspondante. Il est probable que votre image n'est pas trouvée. Donc, première chose à faire: essayer de voir si l'image est trouvé ou non. Aussi, ne jamais attraper les exceptions, sans impression de la stacktrace quelque part ou laisser une trace de l'exception. Cela rend votre code vraiment difficile à déboguer.
Jetez un oeil à cette répondre de la mine liées à votre problème. Et cette réponse, qui est lié à une COMMENT AJOUTER des IMAGES À VOTRE PROJET voici une exemple avec toutes les structure de répertoire de votre Projet (la manière dont elle doit être).
OriginalL'auteur Tristan Hull | 2012-10-02
Vous devez vous connecter pour publier un commentaire.
Lors de l'utilisation d'Eclipse, vous ne gardez pas vos images dans dossier src au lieu de créer un
Source Folder
à cette fin. Veuillez consulter ce lien sur la façon de ajouter des images à un dossier de ressources dans Eclipse.Plus le souci pour moi, n'est pas en utilisant le Dossier Source pour le "truc", comme l'OP a déclaré que les images sont dans le Dossier src, ce dont je doute, c'est le droit chemin à mon humble avis
Dossiers de ressources sont de simples conventions. Vous n'avez pas à utiliser un "dossier ressources" pour vos images à lire. Votre chemin juste être correct.
Il a travaillé, je vous remercie.
La réponse était bonne jusqu'à ce que les cris à la fin. Maintenant, j'ai une tête d'ache.. 🙁
OriginalL'auteur nIcE cOw
L'utiliser pour créer le bouton.
Et ce que vous faites est de définir la
Image
en tant qu'icône. Cela ne fonctionne pas parce que lesetIcon()
méthode nécessite des objets qui mettent en œuvre lesIcon
interface. Espérons que cette aide.Cette partie crée directement le ImageIcon à partir de l'URL sans participation de la partie inutile de la
ImageIO
et les autres.Vous l'avez dit, et je cite: Cela ne fonctionne pas parce que le setIcon() la méthode nécessite des objets qui implémentent l'interface Icon . Cette déclaration est incorrecte.
Voir ce docs.oracle.com/javase/7/docs/api/javax/swing/... Cela prouve ma déclaration
Tu dis que "Ça ne fonctionne pas", ce n'est pas vrai. Et de toute façon, votre réponse ne résout pas le problème.
OriginalL'auteur Sri Harsha Chilakapati
Essayez de mettre un foward slash avant le nom du package dans
getResource()
comme suit:OriginalL'auteur David Kroukamp
Vous pouvez trouver juste l'image directement:
OU si l'image est dans un BOCAL, j'ai l'habitude de créer une fonction pour faire la recherche pour moi de sorte que je peux ré-utiliser.
Alors je vais le faire,
OriginalL'auteur davidXYZ
Cette ligne essaie d'en faire trop en même temps ce qui le rend difficile à traquer une erreur lorsque vous en obtenir un. Je suggère de le diviser en place:
Maintenant, vous pouvez utiliser le débogueur Eclipse pour vérifier la valeur de retour de
imgURL
, qui est le candidat le plus probable pour les entrées en phase nationale. Même si ce n'est pas de vous dire pourquoi vous obtenez un message d'erreur, il se rétrécit vers le bas le problème considérablement.OriginalL'auteur Code-Apprentice