roswellentongues | bonjour,
Je suis quelque peu coincé sur une utilisation d'un rollback sur une petite appli faite en java. J'ai 3 classes : -> ChapitreJava qui contient 3 méthodes :
- List<String> listeDesMots() qui va me retourner une liste de mots à partir d'une constante
- Map<String, Integer> occurrencesDesMots(List<String> liste) qui retourne une liste de couples <String,Integer>, à chaque mot de la liste est associé son nombre d'occurrences
- final String CHAPITRE2 =(....) : mon texte à analyser
-> AppletListe : mon applet
C'est surtout sur la 3e classe (IHMListe) que je bloque. Le but est de construire une IHM où je peux manipuler le texte : taper un mot dans un champ de saisie et regarder si ce mot est présent, compter le nombre d'occurrences de ce mot, voire le retirer du texte. De même, je peux classer par ordre croissant suivant les occurrences les mots du texte (et ordre décroissant). Jusque là, ça fonctionne bien. Là où je bloque, c'est dans l'utilisation d'un bouton annuler me permettant de faire un rollback sur le tri, ou le retrait du mot. Visiblement, le pattern Memento pourrait y répondre mais je ne vois pas comment faire. voici le code source de cette classe IHMListe :
Code :
- //les imports
- public class IHMListe extends JPanel implements ActionListener, ItemListener {
- private JPanel cmd = new JPanel();
- private JLabel afficheur = new JLabel();
- private JTextField saisie = new JTextField();
- private JPanel panelBoutons = new JPanel();
- private JButton boutonRechercher = new JButton("rechercher" );
- private JButton boutonRetirer = new JButton("retirer" );
- private CheckboxGroup mode = new CheckboxGroup();
- private Checkbox ordreCroissant = new Checkbox("croissant", mode, false);
- private Checkbox ordreDecroissant = new Checkbox("décroissant", mode, false);
- private JButton boutonOccurrences = new JButton("occurrence" );
- private JButton boutonAnnuler = new JButton("annuler" );
- private TextArea texte = new TextArea();
- private List<String> liste;
- private Map<String, Integer> occurrences;
- public IHMListe(List<String> liste, Map<String, Integer> occurrences) {
- this.liste = liste;
- this.occurrences = occurrences;
- cmd.setLayout(new GridLayout(3, 1));
- cmd.add(afficheur);
- cmd.add(saisie);
- panelBoutons.setLayout(new FlowLayout(FlowLayout.LEFT));
- panelBoutons.add(boutonRechercher);
- panelBoutons.add(boutonRetirer);
- panelBoutons.add(new JLabel("tri du texte :" ));
- panelBoutons.add(ordreCroissant);
- panelBoutons.add(ordreDecroissant);
- panelBoutons.add(boutonOccurrences);
- panelBoutons.add(boutonAnnuler);
- cmd.add(panelBoutons);
- afficheur.setText(liste.getClass().getName() + " et "
- + occurrences.getClass().getName());
- texte.setText(liste.toString());
- setLayout(new BorderLayout());
- add(cmd, "North" );
- add(texte, "Center" );
- boutonRechercher.addActionListener(this);
- boutonRetirer.addActionListener(this);
- boutonOccurrences.addActionListener(this);
- boutonAnnuler.addActionListener(this);
-
- ordreCroissant.addItemListener(this);
- ordreDecroissant.addItemListener(this);
- }
- public void actionPerformed(ActionEvent ae) {
- try {
- boolean res = false;
- if (ae.getSource() == boutonRechercher || ae.getSource() == saisie) {
- res = liste.contains(saisie.getText());
- Integer occur = occurrences.get(saisie.getText());
- afficheur.setText("résultat de la recherche de : "
- + saisie.getText() + " --> " + res);
- } else if (ae.getSource() == boutonRetirer) {
- res = retirerDeLaListeTousLesElementsCommencantPar(saisie
- .getText());
- afficheur
- .setText("résultat du retrait de tous les éléments commençant par --> "
- + saisie.getText() + " : " + res);
- } else if (ae.getSource() == boutonOccurrences) {
- Integer occur = occurrences.get(saisie.getText());
- if (occur != null)
- afficheur.setText(" --> " + occur + " occurrence(s)" );
- else
- afficheur.setText(" --> ??? " );
- }
- texte.setText(liste.toString());
- } catch (Exception e) {
- afficheur.setText(e.toString());
- }
- }
- public void itemStateChanged(ItemEvent ie) {
- if (ie.getSource() == ordreCroissant)
- Collections.sort(liste);
- else if (ie.getSource() == ordreDecroissant) {
- Stack<String> stack = new Stack<String>();
- Collections.sort(liste);
- for (Iterator<String> it = liste.iterator() ; it.hasNext();) {
- stack.push(it.next()) ;
- }
- liste.clear(); //vider liste
- while (!stack.isEmpty()) {
- liste.add(stack.pop());
- }
- }
- texte.setText(liste.toString());
- }
- private boolean retirerDeLaListeTousLesElementsCommencantPar(String prefixe) {
- boolean resultat = false;
- for (Iterator <String> it = liste.iterator() ; it.hasNext();) {
- String s = it.next();
- if (s.startsWith(prefixe)) {
- it.remove();
- occurrences.put(prefixe, 0);
- resultat = true;
- }
- }
- return resultat;
- }
- }
|
Message édité par roswellentongues le 25-11-2013 à 15:37:30
|