Ajouter une image sur une fenêtre
Fermé
Maximims
Messages postés
227
Date d'inscription
samedi 9 novembre 2013
Statut
Membre
Dernière intervention
23 février 2021
-
23 mai 2018 à 11:06
Maximims Messages postés 227 Date d'inscription samedi 9 novembre 2013 Statut Membre Dernière intervention 23 février 2021 - 1 juin 2018 à 11:01
Maximims Messages postés 227 Date d'inscription samedi 9 novembre 2013 Statut Membre Dernière intervention 23 février 2021 - 1 juin 2018 à 11:01
A voir également:
- Ajouter une image sur une fenêtre
- Ajouter une signature sur word - Guide
- Légender une image - Guide
- Comment agrandir une image - Guide
- Créer une image iso - Guide
- Ajouter une liste déroulante excel - Guide
2 réponses
KX
Messages postés
16755
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
23 mai 2018 à 11:23
23 mai 2018 à 11:23
Bonjour,
Cela dépend de quels outils tu utilises pour compiler.
En général tu as deux dossiers :
Le programme s'exécute à partir des .class donc les images devraient plutôt être dans
Cela dépend de quels outils tu utilises pour compiler.
En général tu as deux dossiers :
srcpour les .java et
binpour les .class
Le programme s'exécute à partir des .class donc les images devraient plutôt être dans
binpas dans
src.
Maximims
Messages postés
227
Date d'inscription
samedi 9 novembre 2013
Statut
Membre
Dernière intervention
23 février 2021
68
Modifié le 25 mai 2018 à 08:34
Modifié le 25 mai 2018 à 08:34
Bonsoir,
Merci pour ta réponse, j'utilise le logiciel Eclipse (je ne sais pas si c'est le meilleur mais bon...)
Voilà, par exemple, en ajoutant ma photo dans bin, j'obtiens toujours des erreurs dans la console, en fait je ne sais pas si on peut assigner à g une chaîne de caractères et ensuite une image afin de les afficher tous les 2.
Mon but serait d'ajouter le plus d'informations possibles sur chaque fenêtre de matériau et des images pourraient rendre le logiciel un peu plus attrayant et coloré...
Merci d'avance!
Je drop quand même les erreurs obtenues peut-être qu'elles pourront servir :
Merci pour ta réponse, j'utilise le logiciel Eclipse (je ne sais pas si c'est le meilleur mais bon...)
private void draw(Graphics g) throws IOException{ if(this.forme.equals("Hydrogen")){ g.drawString("HYDROGEN CHARACTERISTICS",400, 20); g.drawString("Atomic number: 1", 10, 40); g.drawString("Atomic mass: 1", 10, 60); g.drawString("Natural state: gaseous", 10, 80); g.drawString("Melting point: 259.1°C", 10, 100); g.drawString("Boiling point: 252.9°C", 10, 120); Image img = ImageIO.read(new File("hydrogen.jpg")); g.drawImage(img, 0, 0, this); } }
Voilà, par exemple, en ajoutant ma photo dans bin, j'obtiens toujours des erreurs dans la console, en fait je ne sais pas si on peut assigner à g une chaîne de caractères et ensuite une image afin de les afficher tous les 2.
Mon but serait d'ajouter le plus d'informations possibles sur chaque fenêtre de matériau et des images pourraient rendre le logiciel un peu plus attrayant et coloré...
Merci d'avance!
Je drop quand même les erreurs obtenues peut-être qu'elles pourront servir :
at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
javax.imageio.IIOException: Can't read input file!
at javax.imageio.ImageIO.read(ImageIO.java:1301)
at projetJava.Panneau.draw(Panneau.java:45)
at projetJava.Panneau.paintComponent(Panneau.java:31)
at javax.swing.JComponent.paint(JComponent.java:1056)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5210)
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1579)
at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1502)
at javax.swing.RepaintManager.paint(RepaintManager.java:1272)
at javax.swing.JComponent._paintImmediately(JComponent.java:5158)
at javax.swing.JComponent.paintImmediately(JComponent.java:4969)
at javax.swing.RepaintManager$4.run(RepaintManager.java:831)
at javax.swing.RepaintManager$4.run(RepaintManager.java:814)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:814)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:789)
at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:738)
at javax.swing.RepaintManager.access$1200(RepaintManager.java:64)
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1732)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
Maximims
Messages postés
227
Date d'inscription
samedi 9 novembre 2013
Statut
Membre
Dernière intervention
23 février 2021
68
25 mai 2018 à 01:48
25 mai 2018 à 01:48
Après quelques recherches j'ai finalement réussi à ajouter une image en indiquant directement son chemin.
Autre petite question: puis-je "appeler" l'image d'une autre manière car si je change de machine, mon image ne sera plus au même chemin d'accès. Merci à toi!
Autre petite question: puis-je "appeler" l'image d'une autre manière car si je change de machine, mon image ne sera plus au même chemin d'accès. Merci à toi!
KX
Messages postés
16755
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
>
Maximims
Messages postés
227
Date d'inscription
samedi 9 novembre 2013
Statut
Membre
Dernière intervention
23 février 2021
25 mai 2018 à 08:50
25 mai 2018 à 08:50
ImageIO.read(new File("hydrogen.jpg"));va lire un fichier en chemin relatif par rapport à l'endroit où tu as lancé le programme.
Le mieux serait plutôt d'utiliser le classloader, avec un chemin relatif au classpath du programme (les .class etc)
Remarque : il n'y a pas de raison d'aller lire l'image à chaque fois que tu fais le draw, une seule fois devrait suffire.
private Map<String, Image> cache = new WeakHashMap<>(); private void draw(Graphics g) throws IOException{ if (forme.equals("Hydrogen")){ g.drawString("HYDROGEN CHARACTERISTICS",400, 20); g.drawString("Atomic number: 1", 10, 40); g.drawString("Atomic mass: 1", 10, 60); g.drawString("Natural state: gaseous", 10, 80); g.drawString("Melting point: 259.1°C", 10, 100); g.drawString("Boiling point: 252.9°C", 10, 120); Image img = cache.get("Hydrogen"); if (img == null) { img = ImageIO.read(Thread.currentThread().getContextClassLoader().getResourceAsStream("hydrogen.jpg")); cache.put("Hydrogen", img); } g.drawImage(img, 0, 0, this); }
Remarque : au vu des informations que tu affiches, il serait sûrement astucieux d'utiliser un enum pour tes différents éléments périodiques et/ou un fichier texte pour leurs détails.
Maximims
Messages postés
227
Date d'inscription
samedi 9 novembre 2013
Statut
Membre
Dernière intervention
23 février 2021
68
25 mai 2018 à 10:13
25 mai 2018 à 10:13
Merci beaucoup pour tes réponses ça m'aide énormément!
Je me permets de te demander une petite chose, afin de rendre un peu plus professionnel mon programme j'aimerais rajouter une partie login/register dès le lancement du programme afin d'autoriser seulement des personnes identifiés (pour mettre ce programme à disposition de mon école d'ingénieur).
J'ai demandé de l'aide à un professeur, il m'a indiqué qu'il fallait simplement créer une fenêtre qui autorise l'accès à mon autre fenêtre (celle qui affiche les caractéristiques des matériaux). Étant débutant dans le domaine, je ne sais pas du tout comment y parvenir, merci à toi!
Je me permets de te demander une petite chose, afin de rendre un peu plus professionnel mon programme j'aimerais rajouter une partie login/register dès le lancement du programme afin d'autoriser seulement des personnes identifiés (pour mettre ce programme à disposition de mon école d'ingénieur).
J'ai demandé de l'aide à un professeur, il m'a indiqué qu'il fallait simplement créer une fenêtre qui autorise l'accès à mon autre fenêtre (celle qui affiche les caractéristiques des matériaux). Étant débutant dans le domaine, je ne sais pas du tout comment y parvenir, merci à toi!
KX
Messages postés
16755
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
>
Maximims
Messages postés
227
Date d'inscription
samedi 9 novembre 2013
Statut
Membre
Dernière intervention
23 février 2021
25 mai 2018 à 13:39
25 mai 2018 à 13:39
Actuellement tu dois probablement avoir une JFrame dont tu fais un setVisible(true);
Mais il est tout à fait envisageable de mettre du code avant cet affichage, par exemple afficher une autre fenêtre, voire juste une pop-up : https://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html
Et de n'afficher ta fenêtre principale que si tu as satisfait aux conditions d'identifications précédentes.
Exemple :
Remarque : Je pense que le plus simple est d'avoir un seul compte et mot de passe pour toute l'application (tous les utilisateurs auront le même). Sinon après il te faudra une base de données pour gérer ceux qui sont autorisés.
Mais il est tout à fait envisageable de mettre du code avant cet affichage, par exemple afficher une autre fenêtre, voire juste une pop-up : https://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html
Et de n'afficher ta fenêtre principale que si tu as satisfait aux conditions d'identifications précédentes.
Exemple :
boolean authorized = askCredentials(); if (authorized) { displayMainFrame(); }
Remarque : Je pense que le plus simple est d'avoir un seul compte et mot de passe pour toute l'application (tous les utilisateurs auront le même). Sinon après il te faudra une base de données pour gérer ceux qui sont autorisés.
Maximims
Messages postés
227
Date d'inscription
samedi 9 novembre 2013
Statut
Membre
Dernière intervention
23 février 2021
68
30 mai 2018 à 10:49
30 mai 2018 à 10:49
Salut, j'ai crée des pop-ups afin de demander l'accès à la fenêtre suivante mais je ne comprends pas pourquoi j'obtiens une erreur avec ce while..
Pourrais-tu m'éclairer?
Pourrais-tu m'éclairer?
JOptionPane acces = new JOptionPane();
Object password1 = null;
Object username = null;
while (!username.equals("XXXX") && !password1.equals("xxxx")) {
String username = acces.showInputDialog(null, "Veuillez entrer votre identifiant", "Material database comparison", JOptionPane.QUESTION_MESSAGE);
String password1 = acces.showInputDialog(null, "Veuillez entrer votre password", "Material database comparison", JOptionPane.QUESTION_MESSAGE);
}