2010-11-10 37 views
0

Je suis en train de construire une simple calculatrice de soustraction seulement modifiée où z = x - y. J'ai créé 3 champs de texte: x, y et z. L'utilisateur saisira la valeur à l'aide du clavier (boutons) que j'ai conçu pour le x et le y. Juste en regardant le code ci-dessous, il y a quelques problèmes immédiatement.Comment saisir des nombres dans JtextFields en utilisant le même jeu de boutons?

1) Le champ de texte x n'accepte qu'un seul chiffre. (Je veux qu'il accepte jusqu'à 3 chiffres). Des suggestions sur la façon dont je peux modifier la déclaration else if pour incorporer cela?

2) Lorsque j'en ai fini avec le champ de texte x, je veux le faire de la même manière avec le champ de texte y. Mais les boutons sont strictement affectés au champ de texte x. Il serait inefficace de faire un clavier de plus juste pour y textfield. Alors, comment puis-je basculer entre le champ de texte x et y. Y at-il un code où si l'utilisateur a le curseur sur le champ de texte x, le clavier est réservé pour ce champ de texte x et si l'utilisateur change pour le champ de texte y, le clavier peut être utilisé pour le y.

3) Et une fois que l'utilisateur a tapé, c'est une opération simple z = x - y. Ce qui devrait être facile à mettre en œuvre. c'est-à-dire, convertissez les chaînes en entiers etc. et effectuez la différence.

Merci d'avance!

import javax.swing.*; 
    import java.awt.event.*; 
    import java.io.*; 
    import javax.swing.event.*; 
    import java.awt.*; 
    import java.applet.*; 

    public class EmbeddedMain extends JFrame 
    { 
    private JTextField x,y,z; 
    private JButton button1, button2, button3, button4, button5, button6, button7, button8, button9, button0, buttonR, buttonE; 

     public static void main (String[] args) 
      { 
      EmbeddedMain em = new EmbeddedMain(); 
      } 

     public EmbeddedMain() //constructor begins, method for embedded main class 
     { 
      setTitle("Subtraction"); 
      setSize(450,350); 
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      setLocationRelativeTo(null); 
      setLayout(new GridLayout(4,5,3,3)); 
      setVisible(true); 

     button1= new JButton("7"); 
     button2= new JButton("8"); 
     button3= new JButton("9"); 
     button4= new JButton("4"); 
     button5= new JButton("5"); 
     button6= new JButton("6"); 
     button7= new JButton("1"); 
     button8= new JButton("2"); 
     button9= new JButton("3"); 
     button0= new JButton("0"); 
     buttonR= new JButton("Reset"); 
     buttonE= new JButton("Enter"); 

    x = new JTextField(" "); 
    y = new JTextField(" "); 
    z = new JTextField(" "); 
    z.setEditable(false);  

     add(button1); 
     add(button2); 
     add(button3); 
     add(new JLabel(" x:")); 
     add(x); 
     add(button4); 
     add(button5); 
     add(button6); 
     add(new JLabel(" y:")); 
     add(y); 
     add(button7); 
     add(button8); 
     add(button9); 
     add(new JLabel(" z:")); 
     add(z); 
     add(buttonR); 
     add(button0); 
     add(buttonE); 

     thehandler handler = new thehandler(); 
     button1.addActionListener(handler); 
     button2.addActionListener(handler); 
     button3.addActionListener(handler); 
     button4.addActionListener(handler); 
     button5.addActionListener(handler); 
     button6.addActionListener(handler); 
     button7.addActionListener(handler); 
     button8.addActionListener(handler); 
     button9.addActionListener(handler); 
     button0.addActionListener(handler); 
     buttonR.addActionListener(handler); 
     buttonE.addActionListener(handler); 

    } 

     //building class inside class 
     private class thehandler implements ActionListener{ 

      public void actionPerformed(ActionEvent event){ 

      if(event.getSource()== button1) 
       x.setText("7"); 
      else if (event.getSource()== button2) 
       x.setText("8"); 
      else if (event.getSource()== button3) 
       x.setText("9"); 
      else if (event.getSource()== button4) 
       x.setText("4"); 
      else if (event.getSource()== button5) 
       x.setText("5"); 
      else if (event.getSource()== button6) 
       x.setText("6"); 
      else if (event.getSource()== button7) 
       x.setText("1"); 
      else if (event.getSource()== button8) 
       x.setText("2"); 
      else if (event.getSource()== button9) 
       x.setText("3"); 
      else if (event.getSource()== button0) 
       x.setText("0"); 
      else if (event.getSource()== buttonR) 
       x.setText(" "); 
      } 
     } 

    } 

Répondre

0

Vous pouvez ajouter un MouseListener aux champs de texte afin de savoir quand l'utilisateur est passé de x à y et vice versa:

private JTextField selected; 

selected = x; 
    x.addMouseListener(new MouseAdapter() { 
     public void mouseClicked(MouseEvent e) { 
      selected = x; 
     } 
    }); 
    y.addMouseListener(new MouseAdapter() { 
     public void mouseClicked(MouseEvent e) { 
      selected = y; 
     } 
    }); 

Pour faire la soustraction, convertir le texte présent en x et y à ints et soustrayez . Vous pouvez refactoriser votre actionPerformed à:

public void actionPerformed(ActionEvent event) { 

     String s = selected.getText(); 
     if (event.getSource() == buttonR) { 
      x.setText(""); 
      y.setText(""); 
      z.setText(""); 
     } else if (event.getSource() == buttonE) { 
      int result = Integer.parseInt(x.getText()) - Integer.parseInt(y.getText()); 
      z.setText(String.valueOf(result)); 
     } else { 
      String command = event.getActionCommand(); 
      selected.setText(s + command); 
     } 
    } 
+0

Merci, je vais regarder dans MouseListener plus loin. et revenez vite à vous! – razshan

+0

Je dois basculer entre les deux. Bien, je n'ai aucune idée de la façon dont le MouseListener fonctionne. Je vais aller sur les oracles pour cela. Merci – razshan

0

Cela semble devoir donc je ne vais pas vous donner des détails, de toute façon

  1. au lieu que l'utilisation setText vous devez d'abord getText et concaténer alors le nombre déjà présent avec le nouveau chiffre
  2. vous
  3. pourrait utiliser une variable au début de votre actionPerformed et basculer entre deux champs de texte avec une valeur booléenne par exemple. Par exemple. JTextField cur = first ? x : y
  4. Je viens de lire la documentation de Integer ou String cours et vous trouverez ce dont vous avez besoin (toString, valueOf, parse)

D'ailleurs je vous ai répondu aussi hier et je suggère de ne pas utiliser un si/chaîne d'autre pour chaque bouton puisque vous savez qui est le numéro qui apparaît .. exemple:

((JButton)e.getSource()).getText() == "1" 

cela signifie que vous perdez beaucoup de lignes de code ..

+0

Merci pour les suggestions. – razshan