Question

Je construis simple calculatrice modifiée Soustraction seule où z = x - y. J'ai créé 3 textfields: x, y, et z. L'entrée de la volonté de l'utilisateur de la valeur à l'aide du clavier (touches) J'ai conçu pour x et y.

Juste en regardant le code ci-dessous, il y a deux questions tout de suite.

1) Le x textfield accepte un seul chiffre. (Je veux d'accepter jusqu'à 3 chiffres). Toutes les suggestions sur la façon dont je peux modifier la déclaration d'autre si à intégrer cette?

2) Quand je suis fait avec x textfield, je veux le faire avec la même chose avec l'y textfield. Mais les boutons sont strictement attribués au x textfield. Il serait inefficace de faire un plus clavier juste pour y textfield. Alors, comment puis-je passer entre x et champ texte 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 au y textfield, le clavier peut être utilisé pour l'y alors.

3) Et une fois que l'utilisateur hits entrer, son une opération simple, z = x - y. Ce qui devrait être facile à mettre en œuvre. dire convertir les chaînes en nombres entiers, etc., et effectuer la différence.

Merci à vous tous à l'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("   ");   
            }
        }

    }
Était-ce utile?

La solution

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 la soustraction, convertir le texte présent en x et y à ints et soustrayez. Vous pouvez factoriser 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);
        }
    }

Autres conseils

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 pouvez 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
  3. il suffit de lire la documentation des classes de Integer ou String et vous trouverez ce que vous avez besoin (toString, valueOf, parse)

Par la façon dont je vous a également répondu hier et je vous suggère de ne pas utiliser un si / chaîne d'autre pour chaque bouton puisque vous savez qui est le numéro qui est affiché .. par exemple:

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

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top