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

 Java Discussion :

Listener sur JPanel


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de snay13
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2009
    Messages : 236
    Par défaut Listener sur JPanel
    Bonjour
    Je crée des jpanel dynamiquement et je dois créer des ecouteurs sur ces jpanels. Je dois pouvoir les identifier afin de modifier la couleur de fond lors d'un clic sur ce jpanel lors de sa selection ou non selection

    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
     
            PAN_Vignette = new Vignette[liste.length];
            for (int i = 0; i < liste.length; i++)
            {
     
                //Nom Fichier
                String nomFichier = new File(liste[i]).getName();
     
                PAN_Vignette[i] = new Vignette(
                    (int) ((scroll.getPreferredSize().width - 60) * 0.3),
                    (int) ((scroll.getPreferredSize().height - 45) * 0.45),
                    pathImage, nomFichier);
                PAN_Vignette[i].addMouseListener(this);
                PAN_Colonne1.add(PAN_Vignette[i]);
            }
    Comment faire pour identifier ces jpanel lors du clic ?

  2. #2
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut
    Quel est la finalité?
    Si tu veux réaliser une sorte de damier, tu devrais plutôt utiliser un unique panel et redéfinir la méthode paintComponent(Graphics g); pour dessiner un carré lors du clic de la souris.

  3. #3
    Membre éclairé Avatar de snay13
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2009
    Messages : 236
    Par défaut
    En fait j'affiche des sortes de vignette de fichiers images donc chaque jpanel doit être selectionnable pour récupérer le chemin du fichier et je dois pouvoir déselectionner la précédente lors d'un clic sur la nouvelle vignette

    Le tout est contenu dan un jpanel lui meme contenu dans un jscrollpane. J'affiche 3 images par ligne et seulemant 2 lignes et demi sont visibles.

  4. #4
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut
    Ce que je ferais :
    Un classe doit contenir les instances des différents JPanel. Appelons la GestionClique.
    J'applique un mouseListener à tous mes JPanel.
    Quand je clique sur un JPanel, j'active la méthode mouseQuelqueChose. Et dedans j'envoi un message à "GestionClique" en lui passant (this) en paramètres.
    GestionClique s'occupe de désaffectionner l'ancien panel sélectionner et de le remplacer par le nouveau.

  5. #5
    Membre éclairé Avatar de snay13
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2009
    Messages : 236
    Par défaut
    J'avoue ne pas trop voir comment faire

    voici mon code
    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
    JPanel PAN_Colonne1 = new JPanel();
            PAN_Colonne1.setPreferredSize(new Dimension(
                   (int) ((Informations.screenWidth - 15) * 0.65),
                    c));
            PAN_Colonne1.setBorder(BorderFactory.createLineBorder(Color.black, 5));
            PAN_Colonne1.setBackground(new Color(98, 181, 213));
            PAN_Colonne1.setLayout(new FlowLayout(FlowLayout.LEFT, 15, 15));
    
            JScrollPane scroll = new JScrollPane(PAN_Colonne1,
                    ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
                    ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
            scroll.setPreferredSize(new Dimension(
                    (int) ((Informations.screenWidth - 15) * 0.65),
                    (int) ((Informations.screenHeight - 15) * 0.8)));
            MonScrollBar UIScrollBar = new MonScrollBar();
            JScrollBar ScrollBar = new JScrollBar();
            ScrollBar.setUI(UIScrollBar);
            scroll.setVerticalScrollBar(ScrollBar);
            container.add(scroll);
            
            
            //Boucle recuperation + vignette
            PAN_Vignette = new Vignette[liste.length];
            for (int i = 0; i < liste.length; i++)
            {
                //Path image
                String pathImage = ManagerPath.getNomDossier(liste[i]) + "/1.png";
                /*//Date et Heure
                String formatDate = "dd/MM/yyyy"; SimpleDateFormat formaterDate = new SimpleDateFormat(formatDate);
                String formatHeure = "HH:mm"; SimpleDateFormat formaterHeure = new SimpleDateFormat(formatHeure);
                String date = formaterDate.format(new Date(new File(liste[i]).lastModified()));
                String heure = formaterHeure.format(new Date(new File(liste[i]).lastModified()));
                //Poids Fichier
                String poidsFichier =  "" + ((float) (new File(liste[i]).length()/1000))/1000 + "Mo";*/
                //Nom Fichier
                String nomFichier = new File(liste[i]).getName();
    
                PAN_Vignette[i] = new Vignette(
                    (int) ((scroll.getPreferredSize().width - 60) * 0.3),
                    (int) ((scroll.getPreferredSize().height - 45) * 0.45),
                    pathImage, nomFichier);
                //PAN_Vignette[i].setBorder(BorderFactory.createEmptyBorder());
                PAN_Vignette[i].addMouseListener(this);
                PAN_Colonne1.add(PAN_Vignette[i]);
    la classe de creation de vignette
    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
     
    public class Vignette extends JPanel 
    {
        private int width, height;
        private String image, nom;
        private JPanel conteneur, PAN_Gauche, PAN_Droit;
     
        public Vignette(int width, int height, String image, String nom)
        {
            this.width = width; this.height = height;
            this.image = image; this.nom = nom;
     
            //Conteneur
            conteneur = new JPanel();
            add(conteneur); conteneur.setLayout(new BorderLayout(0, 0));
     
            //Conteneur Image
            ThreadAffichageImage affichageImage = new ThreadAffichageImage(conteneur, width, height, image);
            affichageImage.execute();
     
            //Conteneur Gauche
            PAN_Gauche = new JPanel();
            PAN_Gauche.setBackground(new Color(204, 223, 242));
            PAN_Gauche.setPreferredSize(new Dimension(
                    (int) (this.width * 0.2),
                    (int) (this.height * 0.85)));
            conteneur.add(PAN_Gauche, BorderLayout.WEST);
            //Conteneur Droit
            PAN_Droit = new JPanel();
            PAN_Droit.setBackground(new Color(204, 223, 242));
            PAN_Droit.setPreferredSize(new Dimension(
                    (int) (this.width * 0.2),
                    (int) (this.height * 0.85)));
            conteneur.add(PAN_Droit, BorderLayout.EAST);
     
            //Conteneur Nom Fichier
            JPanel PAN_Nom = new JPanel();
            PAN_Nom.setPreferredSize(new Dimension(
                    this.width,
                    (int) (this.height * 0.15)));
            conteneur.add(PAN_Nom, BorderLayout.SOUTH); PAN_Nom.setLayout(new BorderLayout());
            //Fichier
            JLabel LAB_NomFichier = new JLabel(this.nom);
            LAB_NomFichier.setPreferredSize(new Dimension(
                    PAN_Nom.getPreferredSize().width,
                    PAN_Nom.getPreferredSize().height));
            LAB_NomFichier.setOpaque(true);
            LAB_NomFichier.setFont(new Font("Serif", Font.BOLD, 17));
            LAB_NomFichier.setBackground(new Color(0x3c3c3e));
            LAB_NomFichier.setForeground(Color.white);
            LAB_NomFichier.setHorizontalAlignment(SwingConstants.CENTER);
            LAB_NomFichier.setVerticalAlignment(SwingConstants.CENTER);
            PAN_Nom.add(LAB_NomFichier);
        }
    }
    Ensuite dans ma classe principale, j'ai mouseClicked mais comment identifier quel jpanel est solicité ?

  6. #6
    Membre éclairé Avatar de snay13
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2009
    Messages : 236
    Par défaut
    Bon, j'ai un petit peu avancé j'ai mis un mouseListener sur ma classe vignette et j'ai ajouté une méthode getName qui me permet de récupérer le nom de la vignette.

    Par contre je ne vois toujours pas comment deselectionner la précedente vignette lors d'une nouvelle selection



    Il doit bien exister quelque chose de plus simple à faire

    Toute idée est le bienvenue

    Merci

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

Discussions similaires

  1. Listener sur JTable
    Par calypso dans le forum Composants
    Réponses: 3
    Dernier message: 05/02/2009, 16h27
  2. Language]Listener sur booléen
    Par harris_macken dans le forum Langage
    Réponses: 9
    Dernier message: 12/06/2005, 00h25
  3. [LISTENER] sur l'insertion de cd
    Par divxdede dans le forum Multimédia
    Réponses: 2
    Dernier message: 03/07/2004, 11h28
  4. [JSlider] listener sur Jslider
    Par Garion dans le forum Composants
    Réponses: 4
    Dernier message: 31/05/2004, 13h33
  5. Listener sur un JPanel
    Par ptitelfe dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 27/03/2004, 13h14

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