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 :

Probleme au niveau de la gestion des evenements


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 20
    Par défaut Probleme au niveau de la gestion des evenements
    Bonjour,
    Je suis étudiant et comme la majorité des étudiants j'ai un projet a finaliser.
    Je dois effectuer un programme qui soit capable de faire de la recherche en parallèle.
    Je debute en java et mon probleme est au niveau de la gestion des évenements.
    Dans mon programme, j'ai une petite fenetre qui pour l'instant doit permettre d'entrer deux nom et de faire la recherche grace à deux threads.
    Pour ma recherche ca à l'air de fonctionner pour l'instant meme si elle reste a optimisé mais j'ai du mal avec la gestion des evenements.

    Mes deux JTextField s'affiche et je peux y tapé du texte mais dès que je passe la souris dans la fenetre je n'ai plus accès au TextField et quand je clique sur mon bouton on dirait que mon programme se fige plus rien .

    Je vous laisse donc le code qui concerne que la partie graphique.

    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
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
     import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.ContainerListener;
    import java.awt.event.FocusEvent;
    import java.awt.event.FocusListener;
    import Recherche.RechercheDocument;
     
    import javax.swing.*;
     
    public class FenetreRecherche extends JFrame{
     
    	private static final long serialVersionUID = 1L;
    	private static final int LEFT = 0;
    	//private FenetreEcouteur ecoutefen;
    	private JPanel panelHaut,panelCentre,panelBas;
    	private JLabel labRecherche;
    	private JLabel fichierEnCours;
    	private JLabel fichierEnCours2;
    	private JTextField recherche;
    	private JTextField recherche2;
    	private JButton boutonRecherche;
     
    	private JRadioButton texte;
    	private JRadioButton image;
    	private JRadioButton binaire;
    	private JRadioButton executable;
     
    	//private JRadioButton 
    	public FenetreRecherche(){
    		build();
    	}
    	public void build()
    	{
    		this.setTitle("Miagle");
    		this.setLayout(new GridLayout(3,1,1,1));
    		panelHaut=new JPanel();
    		panelCentre=new JPanel();
    		panelBas=new JPanel();
     
    		/* affichage panelHaut*/
    		panelHaut.setLayout(new FlowLayout());
    		labRecherche =new JLabel("Recherche :");
    		recherche=new JTextField(20);
    		recherche2=new JTextField(20);
    		boutonRecherche=new JButton("valider");
     
    		panelHaut.add(labRecherche);
    		panelHaut.add(recherche);
    		panelHaut.add(recherche2);
    		panelHaut.add(boutonRecherche);
     
    		/*affichage panelCentre*/
    		panelCentre.setLayout(new GridLayout(3,3,1,1));
    		texte=new JRadioButton("fichier texte");
    		image=new JRadioButton("fichier image");
    		binaire=new JRadioButton("fichier binaire");
    		executable=new JRadioButton("fichier executable");
    		panelCentre.add(texte);
    		panelCentre.add(image);
    		panelCentre.add(binaire);
    		panelCentre.add(executable);
     
    		/*affichage panelBas*/
    		panelBas.setLayout(new GridLayout(2,2,1,1));
    		fichierEnCours=new JLabel("Resultat");
    		panelBas.add(fichierEnCours);
    		fichierEnCours2=new JLabel("Resultat");
    		panelBas.add(fichierEnCours2);
     
     
    		/*affichage des panel*/
    		this.add(panelHaut);
    		this.add(panelCentre);
    		this.add(panelBas);
     
    		/*ajout des ecouteur*/
     
    		boutonRecherche.addActionListener(new boutonRechercheListener());
    		recherche.addActionListener(new rechercheListener());
    		this.setSize(600, 600);
    		this.setVisible(true);
     
    	}	
    	class rechercheListener implements ActionListener{
     
    		public void actionPerformed(ActionEvent arg0){
    			System.out.println("ecriture dans le textfield 1");
    		}
    	}
    	class boutonRechercheListener implements ActionListener{
     
            /**
             * Redéfinition de la méthode actionPerformed
             */
            public void actionPerformed(ActionEvent arg0) {
            	RechercheDocument fich=new RechercheDocument(recherche.getText());
    			RechercheDocument fich2=new RechercheDocument(recherche2.getText());
     
    			fich.start();
    			fich2.start();
    			System.out.println(fich.getResultat());
    			System.out.println(fich2.getResultat());
    			fichierEnCours.setText(fich.getResultat());
    			fichierEnCours2.setText(fich2.getResultat());
                   }
    	}
    }
    cordialement.

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    as-tu des exceptions dans la console? As-tu des erreur quand tu démarret tes threads?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 20
    Par défaut
    Lut,
    Ben enfaite non je n'ai aucun message justement, donc rien pour m'aiguiller dans la bonne direction.

    Puis par rapport à mon code, j'avais à la base fait en sorte que la classe que j'ai donné implementais la classe ActionListener et donc j'avais la methode actionPerformed qui était rajouté.
    J'y mettais donc la gestion des évenements de mes éléments graphiques du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void actionPerformed(ActionEvent e)
    {
     if(e.getSource()==boutonRecherche) //on affiche le resultat
    ;}
    ca marchait plus ou moins le fait qu'il trouvait mes fichiers rechercher (en affichant le resultat dans la console et pas dans ma fenetre).
    Et la en allant sur des sites j'ai vu qu'avoir une seule methode pour gérer autant d'evenement n'etait pas propre donc j'ai crée des "sous classes" par élément graphique et la plus aucune réaction.
    Biensur j'ai ajouter comme écouteur à chaque element graphique l'ecouteur aproprié.

    Une question qui peut etre me mettra sur la voie:
    la classe ActionListener avec ses methodes elles permettent bien de gérer tout type d'evenements??(souris ou clavier).
    Je pose la question parcequ'il y a d'autre classe comme MouseListener ou KeyListener.
    Cordialement et bonne fete de fin d'année à tous!!

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    fich.start();
    			fich2.start();
    			System.out.println(fich.getResultat());
    			System.out.println(fich2.getResultat());
    			fichierEnCours.setText(fich.getResultat());
    			fichierEnCours2.setText(fich2.getResultat());
    Apparement tu lance tes Threads (enfin faut voir le code de RechercheDocument pour voir si c'est bien des thread) et tu affiche immédiatement un résultat alors que le thread n'a vraissemblablement pas fini son travail. Ce qu'il faut c'est déplacer tes System.out.println et tes fichierEnCours.setText() dans ces threads, pour qu'ils soient bien exécutés à la fin.

    Pour ce qui est d'actionListener ils semblent bien utilisés dans ton cas. Les actionListener sont appelé lorsque des éléments graphiques déclenchent des "action". Un bouton par exemple déclenche une action lorsqu'il est utilisé. Une souris qui clique sur un textfield ou un lettre tappée au clavier dans un textfield, ca ne déclenche pas d'actionlistener. Vois les actions comme un sous set ciblé et filtré des mouselistener et keylsitener puisque ces action sont déclenchée par les éléments graphique lorsque des touches spécifique sont utilisée (clic sur le bouton, espace avec le bouton qui a le focus, etc)

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 20
    Par défaut
    Merci pour ce debut de réponse et bonne année en passant.

    Je me suis trompé sur une chose précédement quand je selectionne le bouton valider en tapant sur la touche espace et non pas entrée comme je le faisais le résultat s'affiche dans la console et toujours pas dans ma fenetre.
    Mais mon autre problement est que quand j'affiche la fenetre j'ai acces aux textField avec le clavier, mais dès que je passe la souris dans la fenetre, je n'ai plus accès au composant de ma fenetre.
    Je ne peux que fermer ma fenetre avec un message d'une fenetre pop-up disant que ma fenetre ne fonctionne plus.
    Parcontre si je n'utilise pas ma souris et que j'utilise des le départ le raccourci alt+f4, ma fenetre se ferme sans probleme et sans ce pop-up.
    Je donne le code de FenetreRecherche et de RechercheDocument si ca peut aider.
    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
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.ContainerListener;
    import java.awt.event.FocusEvent;
    import java.awt.event.FocusListener;
    import Recherche.RechercheDocument;
     
    import javax.swing.*;
     
    public class FenetreRecherche extends JFrame{
     
    	private static final long serialVersionUID = 1L;
    	private static final int LEFT = 0;
    	//private FenetreEcouteur ecoutefen;
    	private JPanel panelHaut,panelCentre,panelBas;
    	private JLabel labRecherche;
    	private JLabel fichierEnCours;
    	private JLabel fichierEnCours2;
    	private JTextField recherche;
    	private JTextField recherche2;
    	private JButton boutonRecherche;
     
    	private JRadioButton texte;
    	private JRadioButton image;
    	private JRadioButton binaire;
    	private JRadioButton executable;
     
    	//private JRadioButton 
    	public FenetreRecherche(){
    		build();
    	}
    	public void build()
    	{
    		this.setTitle("Miagle");
    		this.setLayout(new GridLayout(3,1,1,1));
    		panelHaut=new JPanel();
    		panelCentre=new JPanel();
    		panelBas=new JPanel();
     
    		/* affichage panelHaut*/
    		panelHaut.setLayout(new FlowLayout());
    		labRecherche =new JLabel("Recherche :");
    		recherche=new JTextField(20);
    		recherche2=new JTextField(20);
    		boutonRecherche=new JButton("valider");
     
    		panelHaut.add(labRecherche);
    		panelHaut.add(recherche);
    		panelHaut.add(recherche2);
    		panelHaut.add(boutonRecherche);
     
    		/*affichage panelCentre*/
    		panelCentre.setLayout(new GridLayout(3,3,1,1));
    		texte=new JRadioButton("fichier texte");
    		image=new JRadioButton("fichier image");
    		binaire=new JRadioButton("fichier binaire");
    		executable=new JRadioButton("fichier executable");
    		panelCentre.add(texte);
    		panelCentre.add(image);
    		panelCentre.add(binaire);
    		panelCentre.add(executable);
     
    		/*affichage panelBas*/
    		panelBas.setLayout(new GridLayout(2,2,1,1));
    		fichierEnCours=new JLabel("Resultat");
    		panelBas.add(fichierEnCours);
    		fichierEnCours2=new JLabel("Resultat");
    		panelBas.add(fichierEnCours2);
     
     
    		/*affichage des panel*/
    		this.add(panelHaut);
    		this.add(panelCentre);
    		this.add(panelBas);
     
    		/*ajout des ecouteur*/
     
    		boutonRecherche.addActionListener(new boutonRechercheListener());
     
    		recherche.addActionListener(new rechercheListener());
     
     
    		this.setSize(600, 600);
    		this.setVisible(true);
     
    	}	
    	class rechercheListener implements ActionListener{
     
    		public void actionPerformed(ActionEvent arg0){
     
    		}
     
    	}
    	class boutonRechercheListener implements ActionListener{
     
            /**
             * Redéfinition de la méthode actionPerformed
             */
            public void actionPerformed(ActionEvent e) {
            		RechercheDocument fich=new RechercheDocument(recherche.getText());
            		RechercheDocument fich2=new RechercheDocument(recherche2.getText());
     
            		fich.start();
            		fich2.start();
            		System.out.println(fich.getResultat());
            		System.out.println(fich2.getResultat());
            		fichierEnCours.setText(fich.getResultat());
            		fichierEnCours2.setText(fich2.getResultat());
     
            }
     
    	}
    }
    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
     package Recherche;
    import java.io.*;
     
    /*
     * classe qui parcourt un repertoire en vue de rechercher un fichier
     */
    public class RechercheDocument extends Thread{
    	ParcourirRepertoire repertoireCourant;
    	FichierChercher fichierATrouver;
    	String nomOfFichier;
    	public String Resultat;
    	/*
    	 * constructeur qui initialise le fichier a trouver et sa localité
    	 */
    	public RechercheDocument(String nomfichier)
    	{
    		nomOfFichier=nomfichier;
    		//this.run();
     
    		//repertoireCourant=new ParcourirRepertoire("/home/yoda/Bureau");
    	}
    	public void run()
    	{
    		fichierATrouver=new FichierChercher(nomOfFichier);
    		repertoireCourant=new ParcourirRepertoire("/home/yoda/Bureau/");
    		try {
    			this.sleep(1);
    		} catch (InterruptedException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		//Resultat=
    		fichierDansRepertoire(repertoireCourant.nom);
    		System.out.println(getResultat());
     
    	}
    	/*
    	 * fonction qui renvoit le fichier a trouver
    	 */
    	public String getResultat()
    	{
    		return Resultat;
    	}
    	public String fichierDansRepertoire(String nom)
    	{
    		String res = null;
     
    		//on recuperer la liste du repertoire courant mais il ne faut pas perdre la racine de la recherche
    		ParcourirRepertoire suivant=new ParcourirRepertoire(nom);
     
    		//on va parcourir la liste
    		if(suivant.getListe()!=null)
    		{
    			//on parcourt la liste des element du repertoire
    			for(int i=0;i<suivant.getListe().length;i++)
    			{
     
    				//si l'un des contenu est le fichier rechercher
    				if(suivant.getFile(i).getName().equals(fichierATrouver.getNom()))
    				{
    					 System.out.println("trouver"+suivant.getFile(i).getAbsolutePath());
    					 res=suivant.getFile(i).getAbsolutePath();
    				}
    				//si on est face a un repertoire on doit le parcourir
    				if(suivant.getFile(i).isDirectory())
    				{
    					//System.out.println("on va dans "+nom+suivant.getFile(i).getName()+"/");
    					//System.out.println("le fichier chercher est "+fichierATrouver.getNom());
    					this.fichierDansRepertoire(nom+suivant.getFile(i).getName()+"/");
    				}
     
    			}
    		}
     
    		if(res!=null){ 
    			if(Resultat==null)
    				Resultat=res;
    			else Resultat=res+" "+Resultat+" ";
    			//System.out.println("Resultat : "+Resultat+" res : "+res);
    			}
    			return res;
     
     
    	}
    }
    Une information supplémentaire les classe ParcourirRepertoire permet de parcourir un repertoire et la classe FichierChercher est juste une classe qui prend un nom de fichier qui renvoit le nom...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 20
    Par défaut
    Une autre remarque, vu que je n'arrivais pas a mes fins, je me suis dit que je vais reprendre les bases du developpement d'interface graphique en java.
    J'ai donc testé le classique j'ai une fenetre et quand on clique à l'interieur il me prévient.
    Hors quand je clique aucun effet peut etre est ce du à un probleme du compilateur ou autre
    voici le code tout bete :
    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
     import javax.swing.*;
    import java.awt.event.*;
     
     
    /*
     * classe qui affiche une fenetre
     */
    public class MaFenetre extends JFrame implements MouseListener {
    	public MaFenetre()
    	{
     
    		//dimensionner la fenetre
    		this.setSize(300,150);
    		//donner un titre
    		this.setTitle("Hello World!");
     
    		this.addMouseListener(this);
    //		rendre la fenetre visible
    		this.setVisible(true);
    	}
    	public static void main(String args[])
    	{
    		//instanciation de fen comme une JFrame
    		MaFenetre fen=new MaFenetre();
     
     
    	}
    	public void mouseClicked(MouseEvent arg0) {
    		// TODO Auto-generated method stub
    		System.out.println("Clic dans la fenetre");
    	}
    	public void mouseEntered(MouseEvent arg0) {
    		// TODO Auto-generated method stub
     
    	}
    	public void mouseExited(MouseEvent arg0) {
    		// TODO Auto-generated method stub
     
    	}
    	public void mousePressed(MouseEvent arg0) {
    		// TODO Auto-generated method stub
     
    	}
    	public void mouseReleased(MouseEvent arg0) {
    		// TODO Auto-generated method stub
     
    	}
     
    }
    je donne ma config au cas ou :
    OS : Ubuntu 8.10
    environnement de dev : eclipse
    version de java : $ java -version
    java version "1.5.0"
    gij (GNU libgcj) version 4.2.4 (Ubuntu 4.2.4-1ubuntu3)

    Copyright (C) 2007 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions. There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

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

Discussions similaires

  1. Gestion des evenements d'un Menu
    Par juk dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 05/12/2006, 17h37
  2. Gestion des evenements avec la SDL
    Par gusgus dans le forum Ogre
    Réponses: 5
    Dernier message: 01/11/2006, 11h47
  3. Réponses: 3
    Dernier message: 26/08/2006, 00h11
  4. Réponses: 11
    Dernier message: 15/02/2006, 15h45
  5. [C#] Gestion des evenements
    Par zebulix13 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 12/06/2004, 19h40

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