Pb JAVA a: récupération variable sur une pile

scoubida42 Messages postés 8 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 12 novembre 2009 - 21 oct. 2009 à 19:44
scoubida42 Messages postés 8 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 12 novembre 2009 - 22 oct. 2009 à 18:36
Salut à tous!
J'ai commencé le java il n'y a pas très longtemps avec Netbeans, je dois rendre un projet assez rapidement et j'ai des difficultés!!mon projet est de réaliser une application java permettant de calculer les dépenses d'un étudiant!
J'ai 2 parties : une dépense et une recette. Dans chacune de ses parties qui séparé en 3 (3 dépenses différentes et 3 recettes différentes, j'ai 1 jTextFields et 1 comboBox, je rentre une valeur dans la textField et ensuite, je sélectionne si je veux que la dépense soit par semaine, par mois ou par année.
Lorsque je quitte mon champs, il doit s'enregistrer dans une pile d'objets dans lequel je fais ma sauvegarde!
Cette sauvegarde, je ne dois la faire que si mon champs que je viens de rentrer est différent de ce champs contenu dans la variable présente au somment de la pile!!
C'est là que ça bloque!!
Voici ma fonction permettant de comparer mes 2 valeurs!

    public int Comparaison()
    {
        String Test1=jTextField1.getText(); //récupe de la val dans TextBox
        if(jTextField1.getText()==undoStack.lastElement().oldtext1)
            return 0; //si c'est égal renvoie 0
        else
            return 1; //sinon 1
     }


Mon problème est qu'il me renvoie toujorus la même chose!le 0!!
Merci à tous ceux qui voudront bien m'aider!je les remercier déjà d'avance!

6 réponses

kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
22 oct. 2009 à 11:13
Salut,

le classique pb de l'égalité d'objet. En java, les chaines de caractères (String) sont des objets, donc faire la comparaison avec '==' revient à comparer les références et non les valeurs des chaines de caractères.
Utilise la méthode equals, ça marchera mieux.
Au passage, à quoi ça sert de renvoyer 0 ou 1 ? soit tu renvoie un boolean (egal, pas egal) avec la méthode equals ou un int (plus petit, egal ou plus grand) avec la méthode compareTo.
Et ta variable Test1, à quoi sert elle ?

public boolean comparer()
{
return jTextField1.getText().equals(undoStack.lastElement().oldtext1);
}


ou

public int comparer()
{
return jTextField1.getText().compareTo(undoStack.lastElement().oldtext1);
}
0
scoubida42 Messages postés 8 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 12 novembre 2009
22 oct. 2009 à 15:42
En fait, maintenant, mon test marche puisque je l ai entierement refait.
Maintenant, j'aimerai optimiser mon code, je pense qu'il y a pas mal de chose a faire :
voici l'une de mes classes, aui doit etre horrible pour des gens qui s'y connaissent bien en java :


Code :
//*******************************************
//Fichier GUIState.java
//*******************************************
package mybudgetingtool;
 
public class GUIState {
    //******************************************************
    // Déclarations des variables pour la sauvegarde des TextsFields :
    String oldtext1, oldtext2, oldtext3;
    String oldtext4, oldtext5, oldtext6;
    String oldtext7, oldtext8, oldtext9;
    //******************************************************
    // Déclarations des variables pour la sauvegarde des ComboBox :
    int oldBox1, oldBox2, oldBox3, oldBox4, oldBox5, oldBox6;
    //********
    // Constructeur :
    public GUIState(budgetingtool g)
    {
        oldtext1 = g.jTextField1.getText();
        oldtext2 = g.jTextField2.getText();
        oldtext3 = g.jTextField3.getText();
        oldtext4 = g.jTextField4.getText();
        oldtext5 = g.jTextField5.getText();
        oldtext6 = g.jTextField6.getText();
        oldtext7 = g.jTextField7.getText();
        oldtext8 = g.jTextField8.getText();
        oldtext9 = g.jTextField9.getText();
        oldBox1 = g.jComboBox1.getSelectedIndex();
        oldBox2 = g.jComboBox2.getSelectedIndex();
        oldBox3 = g.jComboBox3.getSelectedIndex();
        oldBox4 = g.jComboBox4.getSelectedIndex();
        oldBox5 = g.jComboBox5.getSelectedIndex();
        oldBox6 = g.jComboBox6.getSelectedIndex();
      }
      //Méthode :
      public void setGUI(budgetingtool g) {
         g.jTextField1.setText(oldtext1);
         g.jTextField2.setText(oldtext2);
         g.jTextField3.setText (oldtext3);
         g.jTextField4.setText(oldtext4);
         g.jTextField5.setText(oldtext5);
         g.jTextField6.setText(oldtext6);
         g.jTextField7.setText(oldtext7);
         g.jTextField8.setText( oldtext8);
         g.jTextField9.setText(oldtext9);
         g.jComboBox1.setSelectedIndex(oldBox1);
         g.jComboBox2.setSelectedIndex(oldBox2);
         g.jComboBox3.setSelectedIndex(oldBox3);
         g.jComboBox4.setSelectedIndex(oldBox4);
         g.jComboBox5.setSelectedIndex(oldBox5);
         g.jComboBox6.setSelectedIndex(oldBox6);
    }
      public void setinitializeGUI(budgetingtool g)
      {
         g.jTextField1.setText("0.00");
         g.jTextField2.setText("0.00");
         g.jTextField3.setText("0.00");
         g.jTextField4.setText("0.00");
         g.jTextField5.setText("0.00");
         g.jTextField6.setText("0.00");
         g.jTextField7.setText("0.00");
         g.jTextField8.setText("0.00");
         g.jTextField9.setText("0.00");
         g.jComboBox1.setSelectedIndex(0);
         g.jComboBox2.setSelectedIndex(0);
         g.jComboBox3.setSelectedIndex(0);
         g.jComboBox4.setSelectedIndex(0);
         g.jComboBox5.setSelectedIndex(0);
         g.jComboBox6.setSelectedIndex(0);
      }
}
//*******************************************
// Fichier budgetingtool.java
//*******************************************
//utilisation d'un TextField
 
    private void jTextField1FocusLost(java.awt.event.FocusEvent evt) {                                      
           Calculate();
        if(jTextField1.getText().equals(undoStack.lastElement().oldtext1))
        {
            JOptionPane.showMessageDialog(this," pas d'élément à ajouter pour textField1");
         }
        else
        {
             addElementStack();
             JOptionPane.showMessageDialog(this,undoStack.lastElement().oldtext1 +" élément 1 ajouté");
        }
}                  
 
//********************************************************
     Stack<GUIState> undoStack=new Stack<GUIState>();
     Stack<GUIState> redoStack=new Stack<GUIState>();
        undoStack.push(new GUIState(this));
        redoStack.push(new GUIState(this));
 
    private void addElementStack()
    {
        //Get GUI State :
        oldState = new GUIState(this);
        //put on undoStack
        undoStack.push(oldState);
    }
    private void restoreundoState()
    {
          undoStack.pop();
          oldState=undoStack.peek();
          oldState.setGUI(this);
          oldState=new GUIState(this);
          redoStack.push(oldState);
    }
 
    private void restoreredoState()
    {
          redoStack.pop();
          oldState=redoStack.peek();
          oldState.setGUI(this);
          addElementStack();
    }


J'espere que c'est plus claire maintenant que je viens de mettre une partie de mon code, sachant que ce code ne marche pas, si mon textField change, il me remet la meme valeur dans la pile, ce que je ne veux pas...
merci de votre reponse par avance.
0
kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
22 oct. 2009 à 16:43
relis la javadoc de la classe Stack surtout la méthode pop().
Tu fais un pop mais tu ne conserves pas la valeur et tu prends la valeur d'en dessous ...
0
scoubida42 Messages postés 8 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 12 novembre 2009
22 oct. 2009 à 17:35
Ok!
mais pour moi, c'est logique puisque une fois que j'ai changé ma valeur, elle est automatiquement ajouté à la pile!si je fais un undo, je ne veux plus l'avoir cette valeur,c'est pour ça que je vire l'état actuel de ma pile!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
22 oct. 2009 à 18:31
ok pour l'utilisation du stack. Mais quand est ce que les méthodes sont appelées ? à quoi correspond le type budgetingtool ?
0
scoubida42 Messages postés 8 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 12 novembre 2009
22 oct. 2009 à 18:36
Elles sont appelés lorsque j'appuie sur un bouton.

VOici le code :
    //************************************************
    //                Bouton UNDO :
    //************************************************
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        restoreundoState();
    }                                        

    //************************************************
    //                Bouton REDO :
    //************************************************
    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        restoreredoState();
    }                                        




Je pense que le type budgetingtool correspond à ma fenêtre avec mon design!
0
Rejoignez-nous