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 :

Sélectionner et encadrer un JLabel affichant une photo via un click sur celui-ci


Sujet :

AWT/Swing Java

  1. #1
    Invité
    Invité(e)
    Par défaut Sélectionner et encadrer un JLabel affichant une photo via un click sur celui-ci
    Bonjour,

    J'ai un JPanel sur lequel j'ajoute des labels afin d'afficher des photos miniatures comme c'est sur la photo suivante:

    Ce que je voudrais c'est savoir si c'est possible qu'en cliquant sur un de ces JLabels créés cela me sélectionne la photo. En gros est ce qu'en passant la souris dessus il peut savoir via les coordonnées que c'est tel ou tel JLabel ?
    Dernière modification par Invité ; 17/07/2007 à 23h47.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 238
    Points : 267
    Points
    267
    Par défaut
    Salut,

    Il suffit lorsque tu crée un label de lui ajouter un MouseListener, ce MouseListener permet de savoir lorsque l'on clique dessus.

    a+

  3. #3
    Membre éclairé Avatar de LeXo
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 147
    Points : 868
    Points
    868
    Par défaut
    sans cliquer dessus regarde du coté du MouseMotionListener

  4. #4
    Invité
    Invité(e)
    Par défaut
    En fait j'ai donc un JPanel qui lorsque j'ouvre un fichier (ici en l'occurence une image), va réduire cette image, créer un nouveau JLabel et appliquer l'image à celui-ci. Voici mon code. Je le met car je pense qu'il y a une meilleure façon de faire qui peut me faciliter la tache je pense pour effacer un JLabel de ce JPanel:
    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
    jButtonAddPicture.addActionListener(new java.awt.event.ActionListener() {
    				public void actionPerformed(java.awt.event.ActionEvent e) {
    					graphical.all.Filtre filtre = new Filtre("Images filter");
    					filtre.addExtension(".jpg");
    					filtre.addExtension(".bmp");
    					filtre.addExtension(".gif");
    					chooser = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory());
    					chooser.addChoosableFileFilter(filtre);
    					chooser.setAccessory(new FilePreview(chooser));
    					chooser.setMultiSelectionEnabled(true);
    					if(chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
    						try {
    							filesList = chooser.getSelectedFiles();
    							for(ii = 0; ii < filesList.length; ii++) {
    								file = new File(filesList[ii].getAbsolutePath());
    								new File("Images/Big/Temp/").mkdirs();
    								String temp = filesList[ii].getName();
    								if (temp.lastIndexOf('.') > 0 &&  temp.lastIndexOf('.') < temp.length() - 1)
    						            extension = temp.substring(temp.lastIndexOf('.') + 1).toLowerCase();
    								newFileInTempDirectory = new File("Images/Big/Temp/" + clicksOnAddPicture + "." + extension);
    								apartementsDirectory = new File("Images/Big/Apartments");
    								housesDirectory = new File("Images/Big/Houses");
    								summerCottagesDirectory = new File("Images/Big/SummerCottages");
    								winterCottagesDirectory = new File("Images/Big/WinterCottages");
    								if(!apartementsDirectory.exists())
    									apartementsDirectory.mkdir();
    								if(!housesDirectory.exists())
    									housesDirectory.mkdir();
    								if(!summerCottagesDirectory.exists())
    									summerCottagesDirectory.mkdir();
    								if(!winterCottagesDirectory.exists())
    									winterCottagesDirectory.mkdir();
    								clicksOnAddPicture++;
    								BufferedImage imageToWrite = reduceImage(ImageIO.read(file), 400, 360);
    								ImageIO.write(imageToWrite, "jpg", newFileInTempDirectory);
    								thumbmail = new JLabel(new ImageIcon(reduceImage(ImageIO.read(file), 50, 50)));
    								thumbmail.setBounds(new Rectangle(x, y, 50, 50));
    								/*thumbmail.addMouseListener(new java.awt.event.MouseAdapter() {
    									public void mouseClicked(java.awt.event.MouseEvent e) {
    										componentToDelete = thumbmail.getComponentAt(e.getPoint());
    										componentToDelete.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.LIGHT_GRAY, 1));
    									}
    								});*/
    								jPanelInside.add(thumbmail);
    								x = x + 51;
    								if(clicksOnAddPicture == 7) {
    									y = y + 51;
    									x = 1;
    								}
    								if(clicksOnAddPicture == 14)
    									jButtonAddPicture.setEnabled(false);
    								if(filesList.length == 1)
    									jLabelPictureAdded.setText(filesList.length + " picture has been added!");
    								else
    									jLabelPictureAdded.setText(filesList.length + " pictures have been added!");
    							}
    						}catch(java.io.IOException ee) {};
    					}
    					jPanelInside.updateUI();
    				}
    			});
    En fait au début comme vous pouvez le voir en commentaires, j'avais mis un MouseListener sur le JLabel seulement, avec la façon dont j'ai codé ça, j'ai l'impression que le MouseListener est le même. Je le vois notamment lorsque je click sur n'importe quel JLabel et que celui qui est encadré est toujours le même (le dernier quoi). Pour l'effacer il n'y a pas de problème comme j'appelle la méthode remove(Component comp) du JPanel et que je récupère le component sur lequel click ma souris via "componentToDelete = thumbmail.getComponentAt(e.getPoint());".
    J'ai donc pensé à mettre le MouseListener sur le JPanel à la place de sur le JLabel et j'efface le JLabel via "jPanelInside.remove(jPanelInside.getComponentAt(p));" Seulement là je n'ai pas trouvé comment encadrer mon JPanel lorsque je le sélectionne car comme je récupère un component, celui n'a pas la méthode "setBorder". Il y a sûrement une possibilité mais je ne vois pas.

    Enfin, ce que je souhaiterais savoir c'est s'il y a un moyen, lorsque je viens d'effacer un JLabel du JPanel de déplacer les autres JLabels qui sont à la suite de celui-ci ?

    Merci pour votre aide

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bon j'ai résolu tous mes problèmes sauf un seul, lorsque je sélectionne un JLabel sur le JPanel, comment l'encadrer sachant que pour le sélectionner je récupère le component via la méthode du JPanel "getComponentAt(Point)" et qu'avec les components il n'y a pas la méthode "setBorder" ?

  6. #6
    Membre habitué Avatar de erictoguem
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 150
    Points : 187
    Points
    187
    Par défaut Caste le résultat
    Il te suffit de faire un cast;
    par exemple ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ((JLabel)getComponentAt(Point)).setBorder(...);

  7. #7
    Invité
    Invité(e)
    Par défaut
    C'est ce à quoi j'avais pensé mais j'avais du oublié des parenthèses et ça n'avait pas marché donc j'avais zappé.
    Mais sinon ça me génère une exception avec le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    private JPanel getJPanelInside() {
    		if (jPanelInside == null) {
    			jPanelInside = new JPanel();
    			jPanelInside.setLayout(null);
    			jPanelInside.addMouseListener(new java.awt.event.MouseAdapter() {   
    				public void mouseClicked(java.awt.event.MouseEvent e) {    
    					p = e.getPoint();
    					((JLabel)e.getComponent()).setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.black, 1));
    				}
    			});
    		}
    		return jPanelInside;
    	}
    Et l'exception est:
    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
    Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: javax.swing.JPanel
    	at graphical.admins.AddRealEstate$46.mouseClicked(AddRealEstate.java:1927)
    	at java.awt.Component.processMouseEvent(Unknown Source)
    	at javax.swing.JComponent.processMouseEvent(Unknown Source)
    	at java.awt.Component.processEvent(Unknown Source)
    	at java.awt.Container.processEvent(Unknown Source)
    	at java.awt.Component.dispatchEventImpl(Unknown Source)
    	at java.awt.Container.dispatchEventImpl(Unknown Source)
    	at java.awt.Component.dispatchEvent(Unknown Source)
    	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    	at java.awt.Container.dispatchEventImpl(Unknown Source)
    	at java.awt.Window.dispatchEventImpl(Unknown Source)
    	at java.awt.Component.dispatchEvent(Unknown Source)
    	at java.awt.EventQueue.dispatchEvent(Unknown Source)
    	at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.awt.EventDispatchThread.run(Unknown Source)

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bon en fait j'ai fais différement mais toujours en faisant un cast.

    Merci encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Afficher une photo dans un formulaire
    Par db48752b dans le forum IHM
    Réponses: 7
    Dernier message: 11/09/2006, 12h01
  2. Afficher une photo dans un formulaire
    Par boko93 dans le forum Access
    Réponses: 8
    Dernier message: 04/09/2006, 16h34
  3. [SQL] probleme de syntaxe pour afficher une photo en php
    Par carmen256 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 11/04/2006, 21h48
  4. Comment afficher une photo et une signature
    Par angiosfr dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 23/11/2005, 21h42
  5. [MySQL] Afficher une photo à partir de la base de données
    Par microcongo dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 07/09/2005, 17h29

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