Partage
  • Partager sur Facebook
  • Partager sur Twitter

Aide pour ajouter une fonction recherche

    24 septembre 2020 à 16:12:40

    Bonjour , j’espère que je me retrouve au bon endroit ^^

    On nous a donner un projet a rendre dans 1 semaine , on doit créer une application de gestion de contacte en java.J'ai presque tout fini mais j'ai du mal a ajouter la fonction de recherche pour chercher un contacte et de celle de suppression.

    Voici mon code:

    import javax.swing.*;
    
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    public class GricheSidAliB1 extends JFrame implements ActionListener {
    	private JPanel pn,pc,ps;
    	public static JTextArea contact;
    	private JTextField tf1,tf2,tf3,tr;
    	private JButton ajout,rech,exit;
    	private JScrollPane scroll;
    	private JLabel msg;
    	public GricheSidAliB1 (){
    		setTitle("Gestion de contactes");
    		setSize(500,445);
    		setLocationRelativeTo(this);
    		//Panneau Nord
    		pn=new JPanel();
    		add(pn,"North");
    		pn.setBackground(Color.gray);
    		rech=new JButton("Rechercher");
    		pn.add(rech);
    		tr=new JTextField(10);
    		pn.add(tr);
    		pn.setLayout(new FlowLayout(FlowLayout.LEADING));
    		msg=new JLabel("                                                         ");
    		pn.add(msg);
    		ajout=new JButton("Ajouter");
    		pn.add(ajout);
    		ajout.addActionListener(this);
    		//Panneau Centre
    		pc=new JPanel();
    		add(pc,"Center");
    		pc.setBackground(Color.black);
    		contact=new JTextArea(20,43);
    		pc.add(contact);
    		scroll=new JScrollPane(contact);
    		pc.add(scroll);
    		//Panneau Sud
    		ps=new JPanel();
    		ps.setLayout(new FlowLayout(FlowLayout.RIGHT));
    		add(ps,"South");
    		ps.setBackground(Color.white);
    		exit=new JButton("Quitter l'application",new ImageIcon(getClass().getResource("Exit.png")));
    		ps.add(exit);
    		exit.addActionListener(this);
    		ps.setBackground(Color.gray);
    		
    		
    	}
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		GricheSidAliB1 gs=new GricheSidAliB1();
    		gs.setVisible(true);
    
    	}
    
    	@Override
    	public void actionPerformed(ActionEvent e) {
    		if (e.getSource()==ajout){
    			Gestion ge=new Gestion();
    			ge.setVisible(true);
    		}
    		if (e.getSource()==exit){
    			int n=JOptionPane.showConfirmDialog(this, "Voulez-vous quitter?", "Confirmation", JOptionPane.YES_NO_OPTION);
    			if (n==0) {
    				System.exit(0);
    			}
    		}
    		
    	}
    
    }
    

    En gros , quand je clique sur ajouter , une fenêtre apparaît pour que je saisisse le nom prénom etc... du contacte , une fois que je clique sur confirmer , les identifiants s’insère dans le JTextArea , mais une fois plus de 50 identifiants saisi , comment faire pour rechercher celui voulu? 

    Cordialement,

    • Partager sur Facebook
    • Partager sur Twitter
      24 septembre 2020 à 17:14:02

      Que doit faire ta fonction rechercher ? tu peux faire une recherche du texte du JTextField tr dans le texte du JTextArea contact avec indexOf, qui retournera l'indice de l'emplacement du texte de tr si présent dans contact, et sélectionner ce texte.

      int pos=contact.indexOf(tr.getText());
      if(pos>=0){
          contact.select(pos, tr.getText().length())
      }

      Question subsidiaire: quand tu rouvres ton programme après l'avoir fermé, tu repars avec 0 contact ? si oui, ce n'est pas vraiment une bonne gestion des contacts ^^
      • Partager sur Facebook
      • Partager sur Twitter
        25 septembre 2020 à 4:08:34

        Tout dabord je te remercie car je ne m'attendais pas à une réponse aussi rapide ^^.

        Ma fonction recherche comment dire elle dois juste rechercher un contacte,  comme quand tu veut chercher un mot avec la barre de recherche sur un Site web par exemple.Je vais *ajouter ton code au mien pour voir si sa marche et essayer de mieux comprendre.et oui en fermant mon programme tout se réinitialise à 0 , je suis un débutant du java jai juste fait une formation de niveau 1 dans un endroit proche de ma fac ^^. Y a til moyen pour que les contactes restent sauvegardés dans le JTextArea?

        -
        Edité par Reytsukki 25 septembre 2020 à 4:09:31

        • Partager sur Facebook
        • Partager sur Twitter
          25 septembre 2020 à 15:34:05

          Pour les sauvegarder, il faut les stocker quelque part (fichier texte ou autre, base de données, ...) et les récupérer puis les afficher au lancement du programme.

          En principe, quand on manipule un objet (ici un contact) on crée une classe pour le manipuler plus facilement. Par exemple:

          	public class Contact {
                  public Contact(){Nom=""; Prenom="";Numero="";} //construteur par défaut (new Contact())
                  public Contact(String nom, String prenom, String numero){Nom=nom; Prenom=prenom; Numero=numero;} //constructeur new Contact("Jean","Dupont","000000")
                  public String Nom;
                  public String Prenom;
                  public String Numero;
          }
          Ensuite, pour la manipulation, utiliser un tableau (Array) ou mieux une liste (List)
          List c3 = new ArrayList();
          c3.add(new Contact("Julie","Lescaut","12")); //on ajoute un contact à la liste
          System.out.println("c3("+c3.size()+ "):Nom="+c3.get(0).Nom+";Prenom="+c3.get(0).Prenom+";num="+c3.get(0).Numero);
          } // on affiche l'élément 0 de la liste
          Donc, à l'ouverture du programme on va lire le fichier "Contact.txt" par exemple, dans lequel sera noté sur chaque ligne un contact avec ses informations sous forme "Julie;Lescaut;12;" (par exemple) et on remplit notre liste (on pourrait aussi copier le contenu du fichier dans le JText Area en remplaçant les ";" par une tabulation par exemple). Ensuite on utilise cette liste pour afficher les données. Quand on ajoute un contact, on l'ajoute à la liste et on réactualise l'affichage. Quand on sort du programme, on enregistre les données dans le fichier texte. Quand on cherche, on peut soit parcourir le JTextArea comme précédemment, soit parcourir chaque paramètre de la liste, et si on a une correspondance, on peut donc savoir quel élément de la liste et donc donner plus facilement (je pense) les infos du contact trouvé. Ca fait beaucoup de choses (nouvelles) à voir, je pense, en une réponse.
          • Partager sur Facebook
          • Partager sur Twitter
            25 septembre 2020 à 16:50:26

            Ok merci bcp.

            J'ai tester le IndexOf mais sa ne marche pas du tout.Sa me dit The method IndexOf(string) is underfined for the type JTextArea :/

            • Partager sur Facebook
            • Partager sur Twitter
              25 septembre 2020 à 18:21:48

              je crois que j'ai oublié le getText() en relisant: => int pos=contact.getText().indexOf(tr.getText());

              -
              Edité par umfred 25 septembre 2020 à 18:22:20

              • Partager sur Facebook
              • Partager sur Twitter
                25 septembre 2020 à 19:07:07

                Ah oui , je ne l'ai pas réaliser moi ^^"

                Sa marche comme sa mais y'aurai-t'il un moyen de mettre le contacte qu'on veut rechercher en bleu une fois qu'on appuie sur le bouton recherche?

                par exemple : ici j'ai voulu chercher le mot pain dans le code source de cette page et sa me l'affiche en jaune , je voudrais faire la meme chose dans mon application.

                • Partager sur Facebook
                • Partager sur Twitter
                  28 septembre 2020 à 11:17:07

                  avec le code que je t'ai donné, ça le sélectionne le texte recherché. pour changer la couleur de fond de la sélection il faut utilisé la fonction setSelectionColor(Color c) (http://imss-www.upmf-grenoble.fr/prevert/Prog/Java/swing/JTextArea.html)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    28 septembre 2020 à 15:16:42

                    Le texte ne se sélectionne pas pour je ne sais quel raison,  sa rentre bien dans la fonction , si je sélectionne le texte moi-même sa lui change de couleur comme je le veut mais le problème c quil ne se sélectionne pas tout seul malgré quil n y a aucune erreur dans mon code.

                    contact.select(pos, tr.getText().length());

                    Le problème est la car sa ne le sélectionne pas :/

                    • Partager sur Facebook
                    • Partager sur Twitter
                      28 septembre 2020 à 15:58:02

                      a priori, avant cette ligne, il faut le JTextArea récupére le focus à l'aide de contact.requestFocus();

                      tu peux aussi utiliser un HighLighter (https://docs.oracle.com/javase/6/docs/api/javax/swing/text/Highlighter.html) cf SO => https://stackoverflow.com/questions/5949524/highlight-sentence-in-textarea 

                      Highlighter h = contact.getHighlighter();
                      h.removeAllHighlights();
                      int pos = contact.getText().indexOf(tr.getText(), 0);
                      h.addHighlight(pos ,
                                     pos  + tr.getText().Length(),
                                     DefaultHighlighter.DefaultPainter);

                      -
                      Edité par umfred 28 septembre 2020 à 15:59:18

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Aide pour ajouter une fonction recherche

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown