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

Composants Java Discussion :

Observer/Observable Nombre Mots


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 277
    Par défaut Observer/Observable Nombre Mots
    Je vous résume ce que je veux faire.

    J'ai une première fenêtre qui s'ouvre dès l'ouverture de l'application qui affiche un JTextArea pour pouvoir écrire un texte.

    À partir de cette interface, il m'est possible de naviguer dans un menu d'ouvrir une autre fenêtre de statistiques.

    Ce que je veux faire, c'est que quand l'utilisateur entre son texte, que le panneau statistiques se mettre à jours automatiquement.

    Je veux débuter avec le "label nombre de mots"

    Voici ce que j'ai débuté.

    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
    import java.util.Observable;
    import java.util.Observer;
     
    import javax.swing.JLabel;
    import javax.swing.JTextArea;
     
     
    public class Label extends JLabel implements Observer {
    	int nbMots;
     
     
    	public Label(){	
            setText(String.valueOf(nbMots));		
    	}
     
    	public void update(Observable arg0, Object arg1) {		
    		setText(String.valueOf(((Texte)arg0).getNbMots()));
    	}	
     
    }
    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
    import java.awt.BorderLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
     
    import javax.swing.*;
     
    public class FenetreEditeur extends JFrame implements Runnable {
     
    	JTextArea texteUtilisateur = new JTextArea();
    	JScrollPane scrollPane = new JScrollPane();
    	JMenuBar barreMenu = new JMenuBar();
    	JMenu menu = new JMenu("Révision");
    	JMenuItem item1 = new JMenuItem("Statistiques");
    	JMenuItem item2 = new JMenuItem("Grammaire et orthographe");
    	JMenuItem item3 = new JMenuItem("Analyse automatique");
    	JPanel panel = new JPanel(new BorderLayout());
     
    	Label lbNbMots = new Label();
    	static Texte texte = new Texte();
     
    	int nbMots = 1;
     
    	public void run() {
     
    		barreMenu.add(menu);
    		menu.add(item1);
    		menu.add(item2);
    		menu.add(item3);
     
    		texteUtilisateur = new JTextArea(5, 30);
    		scrollPane = new JScrollPane(texteUtilisateur);
     
    		panel.add(scrollPane, BorderLayout.CENTER);
     
    		JFrame frame = new JFrame("Test");
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		frame.setJMenuBar(barreMenu);
    		frame.setContentPane(panel);
     
    		frame.setSize(600, 600);
    		frame.setLocation(400, 400);
    		frame.setVisible(true);
     
    		Ecouteur action = new Ecouteur();
    		item1.addActionListener(action);
    		item2.addActionListener(action);
    		texteUtilisateur.addKeyListener(action);
     
    	}
     
    	private class Ecouteur implements ActionListener, KeyListener {
     
    		public void actionPerformed(ActionEvent e) {
    			if (e.getSource() == item1) {
     
    				PanneauStatistiques stats = new PanneauStatistiques();
    				Thread t = new Thread(stats);
    				t.start();
     
    			}
    			if (e.getSource() == item2) {
     
    				PanneauCorrecteur cor = new PanneauCorrecteur();
    				Thread t = new Thread(cor);
    				t.start();
    			}
    		}
     
    		public void keyPressed(KeyEvent e) {
     
    			if (e.getKeyCode() == KeyEvent.VK_SPACE) {
     
    				texte.setNbMots(nbMots);
    				nbMots++;
     
    			}
    		}
     
    		@Override
    		public void keyReleased(KeyEvent e) {
    			// TODO Auto-generated method stub
     
    		}
     
    		@Override
    		public void keyTyped(KeyEvent e) {
    			// TODO Auto-generated method stub
     
    		}
    	}
    }
    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
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Container;
    import java.awt.FlowLayout;
    import java.awt.GridBagConstraints;
    import java.awt.GridLayout;
    import java.awt.Insets;
    import java.awt.LayoutManager;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    import java.util.ArrayList;
    import java.util.Observable;
     
    import javax.swing.*;
     
    public class PanneauStatistiques extends JFrame implements Runnable {
     
    	JLabel lbStatistiques = new JLabel("Statistiques");
    	JLabel lbPages = new JLabel("Pages");
    	JLabel lbMots = new JLabel("Mots");
    	JLabel lbCarac1 = new JLabel("Caractères (espace non compris");
    	JLabel lbCarac2 = new JLabel("Caractères (espace compris)");
    	JLabel lbParagraphe = new JLabel("Paragraphes");
    	JLabel lbLignes = new JLabel("Lignes");
    	JLabel lbNbPages = new JLabel("0");
    	JLabel lbNbCarac1 = new JLabel("0");
    	JLabel lbNbCarac2 = new JLabel("0");
    	JLabel lbNbParagraphe = new JLabel("0");
    	JLabel lbNbLignes = new JLabel("0");
     
    	JButton btnFermer = new JButton("Fermer");
    	JPanel panneauPrincipal = new JPanel();
    	JPanel panneauTexte = new JPanel();
    	JPanel panneauStats = new JPanel();
    	JPanel panneauBouton = new JPanel();
     
    	Label lbNbMots = new Label();
    	Texte texte = new Texte();
     
    	public PanneauStatistiques() {
     
    		super("Statistiques");
    		setSize(400, 200);
    		setLocation(500, 500);
    		setVisible(true);
    	}
     
    	public void run() {
     
    		panneauPrincipal = (JPanel) getContentPane();
     
    		panneauTexte.setLayout((new GridLayout(6, 1)));
    		panneauStats.setLayout(new GridLayout(6, 1));
    		panneauTexte.add(lbPages);
    		panneauStats.add(lbNbPages);
    		panneauTexte.add(lbMots);
    		panneauStats.add(lbNbMots);
    		panneauTexte.add(lbCarac1);
    		panneauStats.add(lbNbCarac1);
    		panneauTexte.add(lbCarac2);
    		panneauStats.add(lbNbCarac2);
    		panneauTexte.add(lbParagraphe);
    		panneauStats.add(lbNbParagraphe);
    		panneauTexte.add(lbLignes);
    		panneauStats.add(lbNbLignes);
    		panneauBouton.add(btnFermer);
     
    		panneauPrincipal.add(panneauTexte, BorderLayout.WEST);
    		panneauPrincipal.add(panneauStats, BorderLayout.EAST);
    		panneauPrincipal.add(panneauBouton, BorderLayout.SOUTH);
     
    		Ecouteur action = new Ecouteur();
    		btnFermer.addActionListener(action);
     
    		texte.addObserver(lbNbMots);
     
    		texte.setNbMots(FenetreEditeur.texte.getNbMots());
     
    	}
     
    	private class Ecouteur implements ActionListener {
     
    		public void actionPerformed(ActionEvent e) {
    			if (e.getSource() == btnFermer) {
    				setVisible(false);
    			}
     
    		}
     
    	}
     
    }
    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
    import java.util.Observable;
     
    public class Texte extends Observable {
     
    	private int nbMots;
     
    	public int getNbMots() {
    		return nbMots;
    	}
     
    	public void setNbMots(int nbMots) {
    		this.nbMots = nbMots;
    		setChanged();
    		notifyObservers();
    	}
    }
    Je crois que j'ai mêler un peu les choses. Je crois pas que j'ai mis les méthode key dans le bon panneau.

    Quelqu'un peu me guider, car je crois quand même avoir une bonne base.

    Merci

  2. #2
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 277
    Par défaut
    J'ai réussi à comptabiliser le nombre de mot, sauf que le panneau statistiques doit être fermé et réouvert par la suite pour qu'il soit pris en charge.

    Je veux que les 2 panneaux soit ouvert simultanément et qu'on voit le nombre de mot augmenter.

    J'ai modifier mes classes du haut.

  3. #3
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 913
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 913
    Billets dans le blog
    54
    Par défaut
    Pas besoind d'etre aussi complique :

    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
    texteUtilisateur.getDocument().addDocumentListener(new DocumentListener() {
     
      /**
       * {@inheritDoc}
       */
      @Override
      public void changedUpdate(DocumentEvent e)  {
        [...]
      }
     
      /**
       * {@inheritDoc}
       */
      @Override
      public  void insertUpdate(DocumentEvent e)   {
        [...]
      }
     
      /**
       * {@inheritDoc}
       */
      @Override
      public  void removeUpdate(DocumentEvent e)  {
        [...]
      }
    });
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  4. #4
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 277
    Par défaut
    J'ai appris à implémenter de ma façon.

    Est-ce qu'il y a moyen de garder le code que j'ai fait tout en udaptant automatiquement....

  5. #5
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 277
    Par défaut
    Il n'y a pas un repaint pour que la valeur change automatique sans fermer et réouvrir le panneau.

    Parce que en ce moment, je dois fermer et réouvrir pour que la valeur puisse changer

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 913
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 913
    Billets dans le blog
    54
    Par défaut
    Retire ta Thread et remplace la par un Timer Swing !

    Pour repaint, il suffit d'appeler repaint() mais normalement tu ne devrait pas en avoir besoin.

    Tu as plusieur champs Label lbNbMots es-tu sur d'utiliser le bon ?

    Et comme indique precedement tu t'y prend mal, ce n'est pas un KeyListener qu'il faut utiliser.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

Discussions similaires

  1. XStream sérialisation : Observer / Observable
    Par fabred dans le forum Persistance des données
    Réponses: 3
    Dernier message: 09/05/2012, 01h08
  2. Xstream Serialisation : Observer Observable
    Par fabred dans le forum Langage
    Réponses: 2
    Dernier message: 16/05/2007, 15h40
  3. [Observateur] Observable/Observer more infos
    Par sozie9372 dans le forum Design Patterns
    Réponses: 2
    Dernier message: 29/05/2006, 13h54
  4. observer / observable
    Par alex6891 dans le forum Java ME
    Réponses: 9
    Dernier message: 03/05/2006, 16h31
  5. [DP] observer-observable
    Par schousso dans le forum Général Java
    Réponses: 4
    Dernier message: 15/05/2004, 01h45

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