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:
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:
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:
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:
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