IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Problème d'ajout des images dans un panel


Sujet :

AWT/Swing Java

  1. #1
    Candidat au Club
    Inscrit en
    Juin 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 10
    Points : 3
    Points
    3
    Par défaut Problème d'ajout des images dans un panel
    bonjour;
    j'ai realisé une classe: une Jframe avec trois panels une en haut et l'autre en bas et les deux contient des boutons et une panel entre les deux qui va contenir les images, l'une des bouton est son role et de faire appel a une classe qui contient la fonction d'appel d'images et des autre fonction qui donne double clique pour l'image
    mon probleme ,lors du cliq sur le bouton j'aurais une image dans une nouvelle frame et je veux que l'image s'insere dans le panel du classe principale:
    voila la classe d'ajout de l'image
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    public class TestImage extends JFrame {  
     private static final long    serialVersionUID    = 4983727800375272097L;
     
        public TestImage() {
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            setSize(300, 300);
            setLocationRelativeTo(null);
            BufferedImage img = null;
            try {
                img = ImageIO.read(new File("c:/image.jpeg"));
            } catch (Exception e) {
                e.printStackTrace();
            }
            setContentPane(new MyCanvas(img));
     
        }
     
        public static void main(String[] args) {
        	int s=0;
           TestImage d= new TestImage();
            d.setVisible(true);
     
     
        }
     
        private class MyCanvas extends JComponent implements MouseListener {
     
            private static final long    serialVersionUID    = 8845913940083986438L;
     
            private BufferedImage        buff                = null;
     
            private Raster                data                = null;
     
            public MyCanvas(BufferedImage img) {
                this.addMouseListener(this);
                this.buff = img;
                this.data = img.getData();
     
            }
     
            public void paintComponent(Graphics g) {
     
                g.drawImage(buff, 0, 0, this);
            }
    et la fonction du classe principale qui fait appel à l'image:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	public void actionPerformed(ActionEvent e)
    	{
          if(e.getSource() == b)
          { 
           try{
           TestImage iu=new TestImage();
           iu.setVisible(true);
           }
           catch (Exception e1) {
     
            }
          }
    merci de m'aider

  2. #2
    Expert confirmé
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    Par défaut
    tu peux voir si le résultat d'exécution de ce code te convient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    public class TestImage extends JFrame {  
     private static final long    serialVersionUID    = 4983727800375272097L;
     
        public TestImage() {
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            setSize(300, 300);
            setLocationRelativeTo(null);
        }
     
        public static void main(String[] args) {
        	int s=0;
           TestImage d= new TestImage();
            d.setVisible(true);
     
     
        }
     
        private class MyCanvas extends JComponent implements MouseListener {
     
            private static final long    serialVersionUID    = 8845913940083986438L;
     
            private BufferedImage        buff                = null;
     
            private Raster                data                = null;
     
            public MyCanvas(BufferedImage img) {
                this.addMouseListener(this);
                this.buff = img;
                this.data = img.getData();
     
            }
     
            public void paintComponent(Graphics g) {
     
                g.drawImage(buff, 0, 0, this);
            }


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	public void actionPerformed(ActionEvent e)
    	{
          BufferedImage img = null;
            try {
                img = ImageIO.read(new File("c:/image.jpeg"));
            } catch (Exception e) {
                e.printStackTrace();
            }
             setContentPane(new MyCanvas(img));
          }

  3. #3
    Candidat au Club
    Inscrit en
    Juin 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    j'ai élimine la classe TestImage et j'ai laissé seulement la classe Mycanvas et j'ai ajouté la fonction action performed comme tu m'a proposé mais le probleme reste avec:setContentPane(new MyCanvas(img));
    erreur:cannot find symbol method setContentPane

  4. #4
    Expert confirmé
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    Par défaut
    Citation Envoyé par joumana Voir le message
    erreur:cannot find symbol method setContentPane
    la méthode est déclarée dans quelle classe ?

  5. #5
    Candidat au Club
    Inscrit en
    Juin 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    la fonction actionperformed se trouve dans la classe principale

  6. #6
    Expert confirmé
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    Par défaut
    Citation Envoyé par joumana Voir le message
    la fonction actionperformed se trouve dans la classe principale
    donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class TestImage extends JFrame
    n'est pas la classe principale ?
    si j'ai raison, pourquoi tu définie la méthode main dans cette classe ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public static void main(String[] args) {
        	int s=0;
           TestImage d= new TestImage();
            d.setVisible(true);
        }
    et pour résoudre
    Citation Envoyé par joumana Voir le message
    erreur:cannot find symbol method setContentPane
    si tu crée une instance nom_intsance de la classe TestImage dans ta classe principale, alors tu peux ajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    nom_intsance.setContentPane(new MyCanvas(img));
    dans le code que je t'ai donné.

    NB : dans la classe principale, normalement tu as écrit une chose semblable à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TestImage nom_intsance= new TestImage();

  7. #7
    Candidat au Club
    Inscrit en
    Juin 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    voila mes deux classes:
    la classe principale:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    public class Appel extends JFrame implements ActionListener,MouseMotionListener,MouseListener
    JPanel c = new JPanel();
    JButton b;	
     Appel(String s)
    {
    	super(s);
     
     
    setSize(600,600);
    c.setSize(400,400);
    JPanel p=new JPanel();
    JPanel l=new JPanel();
    p.setLayout(new FlowLayout(FlowLayout.CENTER));
    l.setLayout(new FlowLayout(FlowLayout.CENTER));
    c.setLayout(new FlowLayout());
     b=new JButton("image");
     
    p.add(b);
     
     
     
    add(p,"South");
    add(c,"Center");
    add(l,"North");
    setVisible(true);
    pack();
     
    		b.addActionListener(this);
     
     
    }
    		public void mouseClicked(MouseEvent e){}
    		public void mouseEntered(MouseEvent e){}
    		public void mouseExited(MouseEvent e){}
    		public void mousePressed(MouseEvent e){}
     
    		public void mouseReleased(MouseEvent e){}
    		public void mouseDragged(MouseEvent e){}
     
    	public void actionPerformed(ActionEvent e)
    	{
          if(e.getSource() == b)
     
     
          TestImage iu=new TestImage();
     
           iu.setVisible(true);
     
           }
           catch (Exception e1) {
     
            }
          }
     
    }
     
    				public void mouseMoved(MouseEvent e){}
     
    public static void main(String args[])
    	{
     
        Appel f=new Appel("Mon parc ");
     
     
    	  f.setVisible(true);
        }
    }
    et la classe TestImage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    public class TestImage extends JPanel {
     
        private static final long    serialVersionUID    = 4983727800375272097L;
     
        public TestImage() {
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            setSize(300, 300);
            setLocationRelativeTo(null);
            BufferedImage img = null;
            try {
                img = ImageIO.read(new File("c:/image.jpeg"));
            } catch (Exception e) {
                e.printStackTrace();
            }
            setContentPane(new MyCanvas(img));
     
        }
     
        public static void main(String[] args) {
     
           TestImage d= new TestImage();
            d.setVisible(true);
     
     
        }
     
        private class MyCanvas extends JComponent implements MouseListener {
     
            private static final long    serialVersionUID    = 8845913940083986438L;
     
            private BufferedImage        buff                = null;
     
            private Raster                data                = null;
     
            public MyCanvas(BufferedImage img) {
                this.addMouseListener(this);
                this.buff = img;
                this.data = img.getData();
     
            }
     
            public void paintComponent(Graphics g) {
     
                g.drawImage(buff, 0, 0, this);
            }
        }
    voila les deux classe que je les ai preparé
    merci de me corriger

  8. #8
    Expert confirmé
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    Par défaut
    salut.
    explique moi ce que tu veux faire exactement car ton code est un peu pourri ?
    tu veux afficher une image dans le panneau que se trouve au milieu ?

  9. #9
    Candidat au Club
    Inscrit en
    Juin 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    slt,
    oui je veux lorsque je clique sur la bouton "b" du classe TestImage j'aurais une image qui s'affiche dans le panneau "c" du classe Appel;
    merci

  10. #10
    Expert confirmé
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    Par défaut
    salut.
    voila, j'ai essayé de mon mieux pour régler ton code... je suis pas certain que ça répond à ton besoin car j'ai trop modifié le code et j'ai même supprimé la classe TestImage car je trouve que ça sera mieux optimisé comme çà ; je savais pas si cette classe à un autre rôle, mais d'après ce que j'ai comprid de ton code , elle est inutile :

    classe principale Appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    public class Appel extends JFrame implements ActionListener {
     
    	MyCanvas c = new MyCanvas();
    	JPanel p   = new JPanel();
    	JPanel l   = new JPanel();
    	JButton b  = new JButton("image");
     
    	public Appel(String s) {
    		super(s);		
    		setBounds(100, 100, 700, 700);		
    		p.setLayout(new FlowLayout(FlowLayout.CENTER));		
    		l.setLayout(new FlowLayout(FlowLayout.CENTER));		
    		c.setLayout(new FlowLayout());		
    		p.add(b);
    		getContentPane().add(p, "South");
    		getContentPane().add(c, "Center");
    		getContentPane().add(l, "North");
    		setVisible(true);
    		b.addActionListener(this);
    	}
     
    	public void actionPerformed(ActionEvent arg0) {
    		if (arg0.getSource() == b) {
    		    c.ajouterImage(new File("c:/image.jpeg"));
    		}
    	}
     
    	public static void main(String args[]) {
    		Appel f = new Appel("Mon parc ");
    		f.setVisible(true);
    	}
    }
    la deuxième classe sera MyCanvas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    class MyCanvas extends JPanel implements MouseListener   
     {
     
        private BufferedImage        buff                = null;
     
        private Raster                data                = null;
     
        public MyCanvas() 
        {
            this.addMouseListener(this);
        }
     
    public void ajouterImage(File f)
    {
    	try {
    		buff  = ImageIO.read(f);
    		this.data = buff.getData();
    		repaint();
    	} catch (IOException e) {
    		e.printStackTrace();
    	}
     
    }
       protected void paintComponent(Graphics g) {
    	   super.paintComponent(g);
            g.drawImage(buff, 0, 0, this);
        }
     
    	public void mouseClicked(MouseEvent e) {
     
    	}
     
    	public void mouseEntered(MouseEvent e) {
     
    	}
     
    	public void mouseExited(MouseEvent e) {
     
    	}
     
    	public void mousePressed(MouseEvent e) {
     
    	}
     
    	public void mouseReleased(MouseEvent e) {
     
    	}
     
    }

  11. #11
    Candidat au Club
    Inscrit en
    Juin 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    merci beaucoup Slim de m'aider
    oui c'est ca se que je veux
    mon images est fixe et moi je veux la rendre mobile , je peux changer sa position avec la souris j'ai ajouté les modification suivantes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    class MyCanvas extends JPanel implements MouseListener
     {
     
        private BufferedImage        buff                = null;
     
        private Raster                data                = null;
    	private int xImg, yImg;
    	private int xMouse, yMouse;
        public MyCanvas()
        {
            this.addMouseListener(this);
            	xImg = 0;
    		yImg = 0;
    		xMouse = 0;
    		yMouse = 0;
     
     
        }
     
    public void ajouterImage(File f)
    {
    	try {
    		buff  = ImageIO.read(f);
    		this.data = buff.getData();
    		repaint();
    	} catch (IOException e) {
    		e.printStackTrace();
    	}
     
    }
       protected void paintComponent(Graphics g) {
    	   super.paintComponent(g);
            	g.drawImage( buff, xImg, yImg, this );
    		this.revalidate();
        }
     
    	public void mouseClicked(MouseEvent e) {
     
    	}
     
    	public void mouseEntered(MouseEvent e) {
     
    	}
     
    	public void mouseExited(MouseEvent e) {
     
    	}
     
    	public void mousePressed(MouseEvent e) {
    			xMouse = e.getX();
    		yMouse = e.getY();
     
    	}
     
    	public void mouseReleased(MouseEvent e) {
     
    	}
    	public void mouseDragged( MouseEvent event )
    	{
    		xImg += event.getX() - xMouse;
    		if( xImg < 0 ) { xImg = 0; }
    		yImg += event.getY() - yMouse;
    		if( yImg < 0 ) { yImg = 0; }
    		xMouse = event.getX();
    		yMouse = event.getY();
    		repaint();
    	}
     
    }
    mais malheureusement l'images reste fixe !!

  12. #12
    Expert confirmé
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    Par défaut
    bonjour.
    voila , j'ai essayé de corriger ton code et voila le résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    class MyCanvas extends JPanel implements MouseMotionListener
    {
     
       private BufferedImage buff   = null;
     
       private Raster   data  = null;
    	private int xImg, yImg;
    	private int xMouse, yMouse;
     
       public MyCanvas()
       {
           addMouseMotionListener(this);
       }
     
    public void ajouterImage(File f)
    {
    	try {
    		buff  = ImageIO.read(f);
    		this.data = buff.getData();
    		repaint();
    	} catch (IOException e) {
    		e.printStackTrace();
    	}
     
    }
      protected void paintComponent(Graphics g) {
    	   super.paintComponent(g);
           	g.drawImage( buff, xImg, yImg, this );
    		this.revalidate();
       }
     
     
    	public void mouseDragged( MouseEvent event )
    	{
    		xImg = event.getX();
     
    		if( xImg < 0 ) { xImg = 0; }
     
    		yImg = event.getY() ;
     
    		if( yImg < 0 ) { yImg = 0; }
     
    		repaint();
     
    	}
     
    	public void mouseMoved(MouseEvent arg0) {				
    	}
     
    }

  13. #13
    Candidat au Club
    Inscrit en
    Juin 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    merci merci merci infiniment Slim presque c'est ca c'est que je cherche depuis deux semaines et j'ai pas trouvé une solution
    mais si ca ne te dérange pas jai une autre souci :
    dans le panneau "c" du classe Appel je veux inserer plusieur images alors que mon code me permet seulement d'afficher une seule image autre chose je veux ajouter pour chaque image un identifiant
    j'ai essayé avec le thread :j'ai changé la classe "MyCanvas" impements Runnable
    et j'ai ajouté un identifiant pour le constructeur "
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public MyCanvas(int id)
    {this.id=id;
    this.addMouseListener(this);
    et j'ai ajouté la fonction "public void run(){}"
    mais malheureusement ca ne marche pas car il faut ajouter la fonction "ajouterimage(string f)" dans la fonction run() et losque j'ai changé la "ajouterImage(f) par la fonction run() et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public void actionPerformed(ActionEvent arg0) {
    		if (arg0.getSource() == b) {
    		   MyCanvas c=nex MyCanvas(id);
    c.start();
    		}
    	}
    j'avais c.start(); cannot find
    s'il te plait corrige moi ma dermiere souci pour que je peux avancer
    merci

  14. #14
    Expert confirmé
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    Par défaut
    comment tu veux insérer plusieurs image ?
    tu veux superposer les images ou bien à chaque fois et suite à un clique souris tu insère une nouvelle image qui remplace l'ancienne ?

  15. #15
    Candidat au Club
    Inscrit en
    Juin 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    je veux avoir apres chaque clic sur le bouton "b" une nouvelle image qui s'insere en gardant l'ancienne cad si je clique 2 fois sur la bouton"b" j'aurai deux images dans le panneau "c" du classe Appel!!!
    je viens à realiser ce programme qui me permet d'avoir un image avec une clique et identifiable et je peux avoir plusieurs images aussi, mais l'image s'affiche dans une nouvelle fenetre cad si je clique deux fois sur la bouton "b" j'aurai 2 nouvelle fenetre qui porte une image avec clic et lidentifiant s'incrimente cad image1 id 0 et la 2eme image d'identifiant 1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    public class TestImage extends JFrame implements Runnable {
     
        private static final long    serialVersionUID    = 4983727800375272097L;
       int g=0;
       int id=0;
       BufferedImage img = null;
        public TestImage(int id) {
        	this.id=id;
        	System.out.println(id);
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            setSize(300, 300);
            setLocationRelativeTo(null);
     
     
     
        }
    public void run()
    {
    	  try {
                img = ImageIO.read(new File("image.jpeg"));
            } catch (IOException e) {
                e.printStackTrace();
            }
            setContentPane(new MyCanvas(img));
            setVisible(true);
    }
        public static void main(String[] args) {
            new TestImage(id);
        }
     
        private class MyCanvas extends JComponent implements MouseListener {
     
            private static final long    serialVersionUID    = 8845913940083986438L;
     
            private BufferedImage        buff                = null;
     
            private Raster                data                = null;
     
            public MyCanvas(BufferedImage img) {
                this.addMouseListener(this);
                this.buff = img;
                this.data = img.getData();
            }
     
            public void paintComponent(Graphics g) {
     
                g.drawImage(buff, 0, 0, buff.getWidth(), buff.getHeight(), this);
            }
     
            private void testLocation(Point mouse, String text) {
     
                if(data.getBounds().contains(mouse))
                  {
     
                  	System.out.println("image"+id);
     
     
     
                  }
     
     
            }
     
            public void mouseClicked(MouseEvent e) {
     
                Point p = e.getPoint();
                testLocation(p, "mouseClicked");
            }
     
            public void mousePressed(MouseEvent e) {
     
                Point p = e.getPoint();
                testLocation(p, "mousePressed");
            }
            public void mouseReleased(MouseEvent e) {
     
                Point p = e.getPoint();
                testLocation(p, "mouseReleased");
            }
     
            public void mouseEntered(MouseEvent e) { }
            public void mouseExited(MouseEvent e) { }
     
        }
    }

  16. #16
    Expert confirmé
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    Par défaut
    bonjour.
    l'idée (parmi plusieurs ) est d'ajouter tes images à des Jlabel et d'associer des listener à ces JLabel pour pouvoir les déplacer.
    il faut donc créer une classe qui étend la classe JLabel dont le role est d'ajouter une image à un Jlabel et associer des listener sur ce JLabel pour pouvoir déplacer les images.

    classe Apllel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    public class Appel extends JFrame implements ActionListener {
     
    	MyCanvas c = new MyCanvas();
    	JPanel p   = new JPanel();
    	JPanel l   = new JPanel();
    	JButton b  = new JButton("image");
     
     
    	public Appel(String s) {
    		super(s);		
    		setBounds(100, 100, 700, 700);		
    		p.setLayout(new FlowLayout(FlowLayout.CENTER));		
    		l.setLayout(new FlowLayout(FlowLayout.CENTER));		
    		c.setLayout(new FlowLayout());		
    		p.add(b);
    		getContentPane().add(p, "South");
    		getContentPane().add(c, "Center");
    		getContentPane().add(l, "North");
    		setVisible(true);
    		b.addActionListener(this);
    	}
     
    	public void actionPerformed(ActionEvent arg0) {
    		if (arg0.getSource() == b) {
     
    			JFileChooser choix = new JFileChooser();
    			int retour=choix.showOpenDialog(this);
    			if(retour==JFileChooser.APPROVE_OPTION)
    			{
    		        c.ajouterImage(choix.getSelectedFile().getAbsolutePath());
    			}
    		}
    	}
    	public static void main(String args[]) {
    		Appel f = new Appel("Mon parc ");
    		f.setVisible(true);
    	}
    }
    classe MyCanvas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class MyCanvas extends JPanel 
    {
     
    public void ajouterImage(String chemin)
    {
    	JLabel objetImage = new ImageLabel(chemin);
    	add(objetImage);
    	revalidate();
    }
    }
    classe ImageLabel qui étend JLabel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     class ImageLabel extends JLabel implements MouseMotionListener,MouseListener
    {
    	int initX;
    	int initY;
    	int posCliqueX;
    	int posCliqueY;
    	int deplacementX;
    	int deplacementY; 
    	 public ImageLabel( String f)
    	{
    		setIcon(new ImageIcon(f));
    		addMouseListener(this);
    		addMouseMotionListener(this);
    		initX = (int) this.getLocation().getX();
    		initY = (int) this.getLocation().getY();
    	}
    	public void mouseDragged(MouseEvent arg0) {
     
    		 deplacementX  = arg0.getX() - posCliqueX;
    		 deplacementY  = arg0.getY() - posCliqueY;
    		 setLocation(initX+deplacementX, initY+deplacementY);
    	}
    	public void mouseMoved(MouseEvent arg0) {	
    	}
    	public void mouseClicked(MouseEvent arg0) {	
    	}
    	public void mouseEntered(MouseEvent arg0) {
    	}
    	public void mouseExited(MouseEvent arg0) {	
    	}
    	public void mousePressed(MouseEvent arg0) {
    		posCliqueX = arg0.getX();
    		posCliqueY = arg0.getY();
    	}
    	public void mouseReleased(MouseEvent arg0) {
     
    		initX = (int) this.getLocation().getX();
    		initY = (int) this.getLocation().getY();
    	}	
    }
    tu risque ici d'avoir des problèmes d'affichage lors du dragg de tes images . pour remédier à ce problème , tu peux déplacer l'image sur ton panneau que lors du relâchement de la souris.
    il faut penser aussi à changer le layout de ton panneau C pour ne pas réinitialiser la position de l'image(après déplacent) après un revalidate.

  17. #17
    Candidat au Club
    Inscrit en
    Juin 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    bonjour Slim
    merci de me répondre
    mais dsl, je veux que mon image porte un identifiant car je utilisera cet identifiant dans des autres classes
    pour moi chaque image me présente un équipement bien déterminé c pour cela je veux les identifiés, cliquable car le clic me donne une fenêtre spécifique à cette équipement (qui est représenté par cette image)
    c'est pour cela moi j'ai utilisé au début la classe et le seule problème que j'ai eu avec ce programme c que les images s’insèrent chacune dans une nouvelle frame et non pas dans l panneau "c" du classe principale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    public class TestImage extends JFrame implements Runnable {
     
        private static final long    serialVersionUID    = 4983727800375272097L;
       int g=0;
       int id=0;
       BufferedImage img = null;
        public TestImage(int id) {
        	this.id=id;
        	System.out.println(id);
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            setSize(300, 300);
            setLocationRelativeTo(null);
     
     
     
        }
    public void run()
    {
    	  try {
                img = ImageIO.read(new File("image.jpeg"));
            } catch (IOException e) {
                e.printStackTrace();
            }
            setContentPane(new MyCanvas(img));
            setVisible(true);
    }
        public static void main(String[] args) {
            new TestImage(id);
        }
     
        private class MyCanvas extends JComponent implements MouseListener {
     
            private static final long    serialVersionUID    = 8845913940083986438L;
     
            private BufferedImage        buff                = null;
     
            private Raster                data                = null;
     
            public MyCanvas(BufferedImage img) {
                this.addMouseListener(this);
                this.buff = img;
                this.data = img.getData();
            }
     
            public void paintComponent(Graphics g) {
     
                g.drawImage(buff, 0, 0, buff.getWidth(), buff.getHeight(), this);
            }
     
            private void testLocation(Point mouse, String text) {
     
                if(data.getBounds().contains(mouse))
                  {
                  	Thread h=new Thread(new Etat(id));
                  	System.out.println("image"+id);
     
     
     
                  }
     
     
            }
     
            public void mouseClicked(MouseEvent e) {
     
                Point p = e.getPoint();
                testLocation(p, "mouseClicked");
            }
     
            public void mousePressed(MouseEvent e) {
     
                Point p = e.getPoint();
                testLocation(p, "mousePressed");
            }
            public void mouseReleased(MouseEvent e) {
     
                Point p = e.getPoint();
                testLocation(p, "mouseReleased");
            }
     
            public void mouseEntered(MouseEvent e) { }
            public void mouseExited(MouseEvent e) { }
     
        }
    }

  18. #18
    Expert confirmé
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    Par défaut
    bonjour.
    même avec le code que je t'ai donné, tu peux ajouter cet identifiant :
    dans la classe MyCanvas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class MyCanvas extends JPanel 
    {
      static int nbImage =0;
    public void ajouterImage(String chemin)
    {
    	nbImage ++;
    	ImageLabel objetImage = new ImageLabel(chemin);
    	objetImage.identifiantImage = nbImage;
    	add(objetImage);
    	revalidate();
    }
    }
    et un attribut identifiantImage à la classe ImageLabel qui devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    public class ImageLabel extends JLabel implements MouseMotionListener,MouseListener
    {
    	int initX;
    	int initY;
    	int posCliqueX;
    	int posCliqueY;
    	int deplacementX;
    	int deplacementY; 
    	int identifiantImage ;
    	 public ImageLabel( String f)
    	{
    		setIcon(new ImageIcon(f));
    		addMouseListener(this);
    		addMouseMotionListener(this);
    		initX = (int) this.getLocation().getX();
    		initY = (int) this.getLocation().getY();
    	}
    	public void mouseDragged(MouseEvent arg0) {
    		
    		 deplacementX  = arg0.getX() - posCliqueX;
    		 deplacementY  = arg0.getY() - posCliqueY;
    		 setLocation(initX+deplacementX, initY+deplacementY);
    	}
    	public void mouseMoved(MouseEvent arg0) {	
    	}
    	public void mouseClicked(MouseEvent arg0) {	
    	}
    	public void mouseEntered(MouseEvent arg0) {
    	}
    	public void mouseExited(MouseEvent arg0) {	
    	}
    	public void mousePressed(MouseEvent arg0) {
    		posCliqueX = arg0.getX();
    		posCliqueY = arg0.getY();
    		System.out.println(identifiantImage);
    	}
    	public void mouseReleased(MouseEvent arg0) {
    		
    		initX = (int) this.getLocation().getX();
    		initY = (int) this.getLocation().getY();
    	}	
    }

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/03/2009, 10h47
  2. Ajouter des images dans le corps d'un email
    Par developeuz93 dans le forum ASP
    Réponses: 17
    Dernier message: 23/12/2008, 17h02
  3. [Swing] Ajouter des images dans JLabel
    Par stragaman dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 11/04/2007, 23h07
  4. [C# 2.0][Ajouter des Controls dans un panel
    Par the big ben 5 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 11/11/2006, 09h07
  5. Ajouter des cercles dans un Panel
    Par guano dans le forum 2D
    Réponses: 4
    Dernier message: 16/03/2006, 10h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo