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

placer image sur panel depuis menu, plusieurs images, non !!! - Java - Programmation

Marsh Posté le 15-04-2014 à 22:21:36    

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]

Reply

Marsh Posté le 15-04-2014 à 22:21:36   

Reply

Marsh Posté le 16-04-2014 à 07:28:33    

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. }


Reply

Marsh Posté le 17-04-2014 à 00:13:43    

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

Reply

Marsh Posté le 17-04-2014 à 07:57:00    

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
Reply

Marsh Posté le 17-04-2014 à 09:53:42    

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

Reply

Marsh Posté le 17-04-2014 à 11:54:39    

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
Reply

Marsh Posté le 17-04-2014 à 14:04:57    

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

Reply

Marsh Posté le 17-04-2014 à 14:12:54    

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

Reply

Marsh Posté le 21-04-2014 à 17:08:16    

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
 
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed