Afficher image au clic - debutant
Fermé
MalonTails
Messages postés
86
Date d'inscription
mercredi 26 avril 2017
Statut
Membre
Dernière intervention
26 avril 2021
-
6 avril 2018 à 11:07
MalonTails Messages postés 86 Date d'inscription mercredi 26 avril 2017 Statut Membre Dernière intervention 26 avril 2021 - 9 avril 2018 à 10:05
MalonTails Messages postés 86 Date d'inscription mercredi 26 avril 2017 Statut Membre Dernière intervention 26 avril 2021 - 9 avril 2018 à 10:05
A voir également:
- Javascript afficher une image au clic
- Windows 11 clic droit afficher plus d'options par défaut - Guide
- Image iso - Guide
- Telecharger javascript - Télécharger - Langages
- Légender une image - Guide
- Comment agrandir une image - Guide
1 réponse
KX
Messages postés
16755
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
6 avril 2018 à 19:40
6 avril 2018 à 19:40
Bonjour,
Afficher une nouvelle fenêtre pour chaque image n'est pas forcément une mauvaise idée, c'est ce que fait Gimp par exemple, personnellement je trouverais plus habile d'avoir un système d'onglets à l'intérieur de ta fenêtre principale.
https://docs.oracle.com/javase/tutorial/uiswing/components/tabbedpane.html
Remarque : je ne suis pas fan du concept d'avoir un bouton par image à afficher, cela dépend bien sûr de ce que tu veux faire, mais une liste déroulante permettant de choisir quelle image doit s'ouvrir pourrait être bien.
https://docs.oracle.com/javase/tutorial/uiswing/components/combobox.html
Attention : dans ton code tu fais ImageIO.read() dans le paintComponent, c'est une très mauvaise idée.
Java va automatiquement appeler cette méthode plusieurs fois, autant qu'il veut.
En particulier lors d'un redimensionnement de la fenêtre (le cas qui t'intéresse) il y aura un appel pour chaque nouvelle taille (potentiellement des dizaines à la suite), il est donc maladroit d'aller lire le fichier à chaque fois.
Tu devrais plutôt remplacer ton String image par le BufferedImage map et l'initialiser dans le constructeur, comme ça tu charges le fichier une seule fois au début.
Attention :
Remarque : personnellement je conseillerais plutôt d'avoir un ActionListener par bouton et de faire directement bouton.addActionListener(actionListener1) et bouton2.addActionListener(actionListener2), alors qu'ici tu as probablement fait un frame.addActionListener(actionListener) avec une frame omnisciente qui gère absolument tout ce qu'il se passe, alors que l'on pourrait déléguer les actions, ce qui donne un code plus compréhensible.
Remarque : avec un code complet pour tester ton programme ce serait plus simple de te suivre et te proposer des exemples de code qui correspondraient exactement à ce que tu fais.
Afficher une nouvelle fenêtre pour chaque image n'est pas forcément une mauvaise idée, c'est ce que fait Gimp par exemple, personnellement je trouverais plus habile d'avoir un système d'onglets à l'intérieur de ta fenêtre principale.
https://docs.oracle.com/javase/tutorial/uiswing/components/tabbedpane.html
Remarque : je ne suis pas fan du concept d'avoir un bouton par image à afficher, cela dépend bien sûr de ce que tu veux faire, mais une liste déroulante permettant de choisir quelle image doit s'ouvrir pourrait être bien.
https://docs.oracle.com/javase/tutorial/uiswing/components/combobox.html
Attention : dans ton code tu fais ImageIO.read() dans le paintComponent, c'est une très mauvaise idée.
Java va automatiquement appeler cette méthode plusieurs fois, autant qu'il veut.
En particulier lors d'un redimensionnement de la fenêtre (le cas qui t'intéresse) il y aura un appel pour chaque nouvelle taille (potentiellement des dizaines à la suite), il est donc maladroit d'aller lire le fichier à chaque fois.
Tu devrais plutôt remplacer ton String image par le BufferedImage map et l'initialiser dans le constructeur, comme ça tu charges le fichier une seule fois au début.
Attention :
if((JButton)e.getSource()==bouton)pourrait provoquer une ClassCastException si e.getSource() n'est pas un JButton. Tu pourrais par contre faire
if(e.getSource()==bouton)sans cast.
Remarque : personnellement je conseillerais plutôt d'avoir un ActionListener par bouton et de faire directement bouton.addActionListener(actionListener1) et bouton2.addActionListener(actionListener2), alors qu'ici tu as probablement fait un frame.addActionListener(actionListener) avec une frame omnisciente qui gère absolument tout ce qu'il se passe, alors que l'on pourrait déléguer les actions, ce qui donne un code plus compréhensible.
Remarque : avec un code complet pour tester ton programme ce serait plus simple de te suivre et te proposer des exemples de code qui correspondraient exactement à ce que tu fais.
9 avril 2018 à 10:05
Merci beaucoup d'avoir pris le temps de me répondre, je vais de suite mettre en pratique tes infos. Merci énormément ça va m'aider à progresser.
Pour le coup oui les boutons sont demandés par la personne x).