Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1919 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  placer image sur panel depuis menu, plusieurs images, non !!!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

placer image sur panel depuis menu, plusieurs images, non !!!

n°2225178
pilaau
Posté le 15-04-2014 à 22:21:36  profilanswer
 

Bonjour,
 
C'est mon premier post : indulgence donc.
Voici un prog (pas de moi)
 
Je ne pense pas que ce soit bien difficile à trouver.
 
Ce prog montre un flowlayout et contradictoirement juste avant paintComponent, ces lignes :
 class CCanvasImage extends JPanel {
    // Redessine le panneau

 
 
J'utilise vos balises C/C++, mais c'est du java
 
 

Code :
  1. import java.awt.*;
  2. import javax.swing.*;
  3. import java.awt.event.*;
  4. public class CVisionneuseImages extends JFrame {
  5.   static CVisionneuseImages m_fenetre;
  6.   String m_nomFichier;               // Nom du fichier
  7.   Image  m_imageAct;                 // Reference  l'image actuelle
  8.   CCanvasImage m_affichageImage;     // JPanel pour afficher l'image
  9.   int m_Xpos,m_Ypos;                 // Nouvelle position o˘ sera
  10.                                      // affichÈ le coin supÈrieur
  11.                                      // gauche de l'image
  12.   int m_image_x1,m_image_y1;         // Delimitation actuelle
  13.   int m_image_x2,m_image_y2;         // de l'image
  14.   int m_hauteurImage,m_largeurImage; // Hauteur et largeur en pixels
  15.   // Gestion des Èvenements
  16.   class CMonEcouteurAction implements ActionListener {
  17.     public void actionPerformed(ActionEvent e) {
  18.       String Label;
  19.       Label = e.getActionCommand();
  20.       if(Label.equals("Quitter le programme" ))
  21.          System.exit(0);
  22.       if(Label.equals("Ouvrir image" ))
  23.          ouvrirImages();       
  24.       }
  25.     }
  26.   // Creation d'un panneau (utilise pour l'affichage) et  
  27.   // d'une barre de menu dans le constructeur
  28.   public CVisionneuseImages() {
  29.     super();
  30.     m_Xpos = m_Ypos = 20;       // Position de depart : en haut a gauche
  31.     m_image_x1 = m_image_x2 = m_image_y1 = m_image_y2 = 0;
  32.     // Pas d'image ouverte au demarrage
  33.     m_nomFichier = null;
  34.     m_imageAct = null;
  35.     // Choix du gestionnaire de positionnement
  36.     setLayout(new FlowLayout());
  37.     // Derivation du canvas a partir de JPanel
  38.     m_affichageImage  = new CCanvasImage();
  39.     add(m_affichageImage);
  40.  
  41.     // Ajout d'une barre de menu a la fenetre
  42.     JMenuBar barreMenu = new JMenuBar();
  43.     setJMenuBar(barreMenu);
  44.     // Creation des options du menu
  45.     JMenu menu1 = new JMenu("Fichier" );
  46.     JMenuItem item1  = new JMenuItem("Ouvrir image" );
  47.     item1.addActionListener(new CMonEcouteurAction());
  48.     JMenuItem item2 = new JMenuItem("Quitter le programme" );
  49.     item2.addActionListener(new CMonEcouteurAction());
  50.     menu1.add(item1);
  51.     menu1.add(item2);
  52.     barreMenu.add(menu1);
  53.     setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  54.   }
  55.   // Ouverture d'un fichier image
  56.   public void ouvrirImages(){
  57.     FileDialog d = new FileDialog(this,"Ouvrir image...",
  58.                                   FileDialog.LOAD);
  59.     d.setVisible(true);
  60.     m_nomFichier = d.getFile();
  61.     // Si l'utilisateur ne selectionne  
  62.     // pas d'image, null est retourne.
  63.     // Ne rien faire.
  64.     if(m_nomFichier == null)
  65.        return;
  66.     // Ouverture de l'image
  67.     ImageIcon tmp = new ImageIcon(m_nomFichier);
  68.     m_imageAct = tmp.getImage();
  69.     // Transmission des coordonnees de l'image
  70.     m_largeurImage = m_imageAct.getWidth(m_affichageImage);
  71.     m_hauteurImage = m_imageAct.getHeight(m_affichageImage);
  72.     m_image_x1 = m_Xpos;
  73.     m_image_y1 = m_Ypos;
  74.     m_image_x2 = m_image_x1 + m_largeurImage;
  75.     m_image_y2 = m_image_y1 + m_hauteurImage;
  76.     m_affichageImage.repaint();
  77.   }
  78.   public static void main(String[] args) {
  79.     m_fenetre = new CVisionneuseImages();
  80.     m_fenetre.setSize(400,400);
  81.     m_fenetre.pack();
  82.     m_fenetre.setVisible(true);
  83.   }
  84.   // Cette classe sert a ouvrir et a manipuler les images
  85.   class CCanvasImage extends JPanel {
  86.     // Redessine le panneau
  87.     public void paintComponent(Graphics g) {
  88.       // Si une image est ouverte, l'afficher
  89.       if(m_imageAct != null)
  90.         g.drawImage(m_imageAct,m_Xpos,m_Ypos,this);
  91.     }
  92.     public Dimension getMinimumSize() {
  93.       return m_fenetre.getSize();
  94.     }
  95.     public Dimension getPreferredSize() {
  96.       return getMinimumSize();
  97.     }
  98.   }
  99. }


 
Merci,
 
Pilaau[#00718D][/#00718D]

mood
Publicité
Posté le 15-04-2014 à 22:21:36  profilanswer
 

n°2225193
honrisse
Posté le 16-04-2014 à 07:28:33  profilanswer
 

pilaau a écrit :

Bonjour,
 
C'est mon premier post : indulgence donc.
Voici un prog (pas de moi)
 
Je ne pense pas que ce soit bien difficile à trouver.
 
Ce prog montre un flowlayout et contradictoirement juste avant paintComponent, ces lignes :
 class CCanvasImage extends JPanel {
    // Redessine le panneau

 
 
J'utilise vos balises C/C++, mais c'est du java
 
 

Code :
  1. import java.awt.*;
  2. import javax.swing.*;
  3. import java.awt.event.*;
  4. public class CVisionneuseImages extends JFrame {
  5.   static CVisionneuseImages m_fenetre;
  6.   String m_nomFichier;               // Nom du fichier
  7.   Image  m_imageAct;                 // Reference  l'image actuelle
  8.   CCanvasImage m_affichageImage;     // JPanel pour afficher l'image
  9.   int m_Xpos,m_Ypos;                 // Nouvelle position o˘ sera
  10.                                      // affichÈ le coin supÈrieur
  11.                                      // gauche de l'image
  12.   int m_image_x1,m_image_y1;         // Delimitation actuelle
  13.   int m_image_x2,m_image_y2;         // de l'image
  14.   int m_hauteurImage,m_largeurImage; // Hauteur et largeur en pixels
  15.   // Gestion des Èvenements
  16.   class CMonEcouteurAction implements ActionListener {
  17.     public void actionPerformed(ActionEvent e) {
  18.       String Label;
  19.       Label = e.getActionCommand();
  20.       if(Label.equals("Quitter le programme" ))
  21.          System.exit(0);
  22.       if(Label.equals("Ouvrir image" ))
  23.          ouvrirImages();       
  24.       }
  25.     }
  26.   // Creation d'un panneau (utilise pour l'affichage) et  
  27.   // d'une barre de menu dans le constructeur
  28.   public CVisionneuseImages() {
  29.     super();
  30.     m_Xpos = m_Ypos = 20;       // Position de depart : en haut a gauche
  31.     m_image_x1 = m_image_x2 = m_image_y1 = m_image_y2 = 0;
  32.     // Pas d'image ouverte au demarrage
  33.     m_nomFichier = null;
  34.     m_imageAct = null;
  35.     // Choix du gestionnaire de positionnement
  36.     setLayout(new FlowLayout());
  37.     // Derivation du canvas a partir de JPanel
  38.     m_affichageImage  = new CCanvasImage();
  39.     add(m_affichageImage);
  40.  
  41.     // Ajout d'une barre de menu a la fenetre
  42.     JMenuBar barreMenu = new JMenuBar();
  43.     setJMenuBar(barreMenu);
  44.     // Creation des options du menu
  45.     JMenu menu1 = new JMenu("Fichier" );
  46.     JMenuItem item1  = new JMenuItem("Ouvrir image" );
  47.     item1.addActionListener(new CMonEcouteurAction());
  48.     JMenuItem item2 = new JMenuItem("Quitter le programme" );
  49.     item2.addActionListener(new CMonEcouteurAction());
  50.     menu1.add(item1);
  51.     menu1.add(item2);
  52.     barreMenu.add(menu1);
  53.     setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  54.   }
  55.   // Ouverture d'un fichier image
  56.   public void ouvrirImages(){
  57.     FileDialog d = new FileDialog(this,"Ouvrir image...",
  58.                                   FileDialog.LOAD);
  59.     d.setVisible(true);
  60.     m_nomFichier = d.getFile();
  61.     // Si l'utilisateur ne selectionne  
  62.     // pas d'image, null est retourne.
  63.     // Ne rien faire.
  64.     if(m_nomFichier == null)
  65.        return;
  66.     // Ouverture de l'image
  67.     ImageIcon tmp = new ImageIcon(m_nomFichier);
  68.     m_imageAct = tmp.getImage();
  69.     // Transmission des coordonnees de l'image
  70.     m_largeurImage = m_imageAct.getWidth(m_affichageImage);
  71.     m_hauteurImage = m_imageAct.getHeight(m_affichageImage);
  72.     m_image_x1 = m_Xpos;
  73.     m_image_y1 = m_Ypos;
  74.     m_image_x2 = m_image_x1 + m_largeurImage;
  75.     m_image_y2 = m_image_y1 + m_hauteurImage;
  76.     m_affichageImage.repaint();
  77.   }
  78.   public static void main(String[] args) {
  79.     m_fenetre = new CVisionneuseImages();
  80.     m_fenetre.setSize(400,400);
  81.     m_fenetre.pack();
  82.     m_fenetre.setVisible(true);
  83.   }
  84.   // Cette classe sert a ouvrir et a manipuler les images
  85.   class CCanvasImage extends JPanel {
  86.     // Redessine le panneau
  87.     public void paintComponent(Graphics g) {
  88.       // Si une image est ouverte, l'afficher
  89.       if(m_imageAct != null)
  90.         g.drawImage(m_imageAct,m_Xpos,m_Ypos,this);
  91.     }
  92.     public Dimension getMinimumSize() {
  93.       return m_fenetre.getSize();
  94.     }
  95.     public Dimension getPreferredSize() {
  96.       return getMinimumSize();
  97.     }
  98.   }
  99. }


 
Merci,
 
Pilaau[#00718D][/#00718D]


 
 
Bonjour,
 
A part s'il y a une raison particulière pour dessiner les images avec g.drawImage, je propose ce code qui est plus simple, sinon je donne ma langue au chat :

Code :
  1. import java.awt.*;
  2. import javax.swing.*;
  3. import java.awt.event.*;
  4. public class CVisionneuseImages extends JFrame {
  5. static CVisionneuseImages m_fenetre;
  6. String m_nomFichier; // Nom du fichier
  7. JPanel mainPanel;
  8. // Gestion des Èvenements
  9. class CMonEcouteurAction implements ActionListener {
  10.  public void actionPerformed(ActionEvent e) {
  11.   String Label;
  12.   Label = e.getActionCommand();
  13.   if (Label.equals("Quitter le programme" ))
  14.    System.exit(0);
  15.   if (Label.equals("Ouvrir image" ))
  16.    ouvrirImages();
  17.  }
  18. }
  19. // Creation d'un panneau (utilise pour l'affichage) et
  20. // d'une barre de menu dans le constructeur
  21. public CVisionneuseImages() {
  22.  super();
  23.  // Pas d'image ouverte au demarrage
  24.  m_nomFichier = null;
  25.  mainPanel = new JPanel(new FlowLayout());
  26.  JScrollPane scrollPane = new JScrollPane(mainPanel);
  27.  add(scrollPane);
  28.  // Ajout d'une barre de menu a la fenetre
  29.  JMenuBar barreMenu = new JMenuBar();
  30.  setJMenuBar(barreMenu);
  31.  // Creation des options du menu
  32.  JMenu menu1 = new JMenu("Fichier" );
  33.  JMenuItem item1 = new JMenuItem("Ouvrir image" );
  34.  item1.addActionListener(new CMonEcouteurAction());
  35.  JMenuItem item2 = new JMenuItem("Quitter le programme" );
  36.  item2.addActionListener(new CMonEcouteurAction());
  37.  menu1.add(item1);
  38.  menu1.add(item2);
  39.  barreMenu.add(menu1);
  40.  setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  41. }
  42. // Ouverture d'un fichier image
  43. public void ouvrirImages() {
  44.  FileDialog d = new FileDialog(this, "Ouvrir image...", FileDialog.LOAD);
  45.  d.setVisible(true);
  46.  m_nomFichier = d.getDirectory() + d.getFile();
  47.  // Si l'utilisateur ne selectionne
  48.  // pas d'image, null est retourne.
  49.  // Ne rien faire.
  50.  if (m_nomFichier == null)
  51.   return;
  52.  // Ouverture de l'image
  53.  ImageIcon tmp = new ImageIcon(m_nomFichier);
  54.  mainPanel.add(new JLabel(tmp));
  55.  validate();
  56. }
  57. public static void main(String[] args) {
  58.  m_fenetre = new CVisionneuseImages();
  59.  m_fenetre.setExtendedState(MAXIMIZED_BOTH);
  60.  m_fenetre.setMinimumSize(new Dimension(640, 480));
  61.  m_fenetre.setVisible(true);
  62. }
  63. }


n°2225312
pilaau
Posté le 17-04-2014 à 00:13:43  profilanswer
 

Merci Honrisse,
 
Désolé pour ce temps à réagir, j'ai été très investi ailleurs (pas drôle en plus).
Donc merci, ta solution est géniale, elle fait ce que je voulais.
Si tu as un peu de temps, je rappelle que je suis novice en Java, peut-tu me dire en quoi cette fonction drawImage n'était pas "souhaitable" ?
Je sais, il y a des livres ou le web pour apprendre, mais si tu pouvais m'éviter de heures de recherche, ce serait sympa.
En tout cas, merci à toi
 
Pilaau

n°2225335
honrisse
Posté le 17-04-2014 à 07:57:00  profilanswer
 

pilaau a écrit :

Merci Honrisse,
 
Désolé pour ce temps à réagir, j'ai été très investi ailleurs (pas drôle en plus).
Donc merci, ta solution est géniale, elle fait ce que je voulais.
Si tu as un peu de temps, je rappelle que je suis novice en Java, peut-tu me dire en quoi cette fonction drawImage n'était pas "souhaitable" ?
Je sais, il y a des livres ou le web pour apprendre, mais si tu pouvais m'éviter de heures de recherche, ce serait sympa.
En tout cas, merci à toi
 
Pilaau


 
A mon avis, il n'y a pas de problème à utiliser cette fonction, c'est juste que pour le but visé c'est plus simple d'utiliser directement un JLabel pour afficher une image.

Code :
  1. // Ouverture de l'image
  2. ImageIcon tmp = new ImageIcon(m_nomFichier);
  3. mainPanel.add(new JLabel(tmp));


 
J'utiliserais paintComponent en redéfinissant son comportement si je voudrais afficher plusieurs images dans un canvas, avec des tailles différentes, des figures géométriques par exemple, sinon pour un affichage simple j'utilise un JLabel.


Message édité par honrisse le 17-04-2014 à 07:59:40
n°2225343
pilaau
Posté le 17-04-2014 à 09:53:42  profilanswer
 

Bonjour Honrisse,
 
Cela n'a donc rien à voir avec le choix d'une image animée ?
Je dis cela, car avec une image animée, même avec ta solution, cela ne marche pas !
 
Merci,
 
Philippe

n°2225359
honrisse
Posté le 17-04-2014 à 11:54:39  profilanswer
 

pilaau a écrit :

Bonjour Honrisse,
 
Cela n'a donc rien à voir avec le choix d'une image animée ?
Je dis cela, car avec une image animée, même avec ta solution, cela ne marche pas !
 
Merci,
 
Philippe


 
Il semblerait que Java n'accepte pas certains types de gif : https://stackoverflow.com/questions [...] being-null
Avec cette image ça marche par exemple : http://i.stack.imgur.com/Uhucl.gif.
 
J'ai jamais affiché des gifs avec Java, peut être que quelque chose m'a échappé.


Message édité par honrisse le 17-04-2014 à 11:56:29
n°2225373
pilaau
Posté le 17-04-2014 à 14:04:57  profilanswer
 

Rebonjour,
 
je retire vite ce que j'ai dit,  ça va même avec des images animées,
navré,
 
Pilaau

n°2225375
pilaau
Posté le 17-04-2014 à 14:12:54  profilanswer
 

Je n'avais pas vu ton post que tu as pourtant écrit 2 heures, avant moi,: l'image  :o  

n°2225640
pilaau
Posté le 21-04-2014 à 17:08:16  profilanswer
 

Bonjour,
tu vas dire que je te harcelle :
Dans mon code,
a> tu as supprimé les lignes 8 à 15, donc, n'est il pas utile d'évoquer l'image et ses attributs de positions avec JPanel ?
b>Dans le constructeur, de la ligne 37 à 51, de mon code tu supprimes tout ça pour la même raison ?
c>Dans ton code, tu ajoutes lignes 31 et 32 de ton code

Code :
  1. JScrollPane scrollPane = new JScrollPane(mainPanel);
  2. add(scrollPane);


je ne sais pas ce que c'est mais tu me conseilles je suppose de me débrouiller tout seul !?, ce qui ne me me gène pas dailleurs, je voulais juste dire que je ne comprenais pas.
d>
 
ligne 85 et suivantes de mon code :
 

Code :
  1. m_imageAct = tmp.getImage();
  2. // Transmission des coordonnees de l'image
  3.     m_largeurImage = m_imageAct.getWidth(m_affichageImage);
  4.     m_hauteurImage = m_imageAct.getHeight(m_affichageImage);
  5.     m_image_x1 = m_Xpos;
  6.     m_image_y1 = m_Ypos;
  7.     m_image_x2 = m_image_x1 + m_largeurImage;
  8.     m_image_y2 = m_image_y1 + m_hauteurImage;
  9.     m_affichageImage.repaint();
  10.   }


C'est donc, la différence en utilisant directement  JPanel comme précédemment ?
 
e> 83 de ton code  

Code :
  1. validate


A quoi sert cette fonction ?
 
Je sais que je demande beaucoup, mais je ne sais pas trouver de source d'info pertinente,
ceci dit, tu ne m'as pas dit que mon code était faux, mais alors pourquoi ne tourne t'il pas ?
 
Encore merci,
 
 
Pilaau
 
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  placer image sur panel depuis menu, plusieurs images, non !!!

 

Sujets relatifs
Insérer une image aulieu de courbe en JAVARapatrier les infos de plusieurs fichiers dans un classeur excel
Fondu d'image avec JqueryBesoin d'aide su javascool (génération aléatoire d'image)
Utiliser plusieurs libs graphiques : ne pas perdre de performancesUserform avec plusieurs utilisateurs
texte sous une image agrandieouvrir une image java.
image en surbrillance par plusieurs boutons meme page 
Plus de sujets relatifs à : placer image sur panel depuis menu, plusieurs images, non !!!


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR