Domanda

sto costruendo una semplice sottrazione modificato solo calcolatrice dove z = x - y. Ho creato 3 textfields: x, y, z. L'input dell'utente volontà il valore utilizzando la tastiera (pulsanti) Ho progettato per xe y.

Solo guardando il codice qui sotto, ci sono un paio di problemi subito.

1) Il campo di testo x accetta una sola cifra. (Voglio accettare fino a 3 cifre). Qualche suggerimento su come posso modificare la else if per incorporare questo?

2) Quando mi sono fatto con il campo di testo x, voglio farlo con lo stesso con la y campo di testo. Ma i pulsanti sono strettamente assegnati alla x campo di testo. Sarebbe inefficiente di fare più una tastiera solo per y campo di testo. Così come posso passare tra x e y campo di testo. C'è qualche codice in cui se l'utente ha il cursore sul campo di testo x, la tastiera è riservato per il campo x di testo e se l'utente modifiche al campo di testo y, la tastiera possono essere utilizzati per la y allora.

3) Una volta utente preme entrare, è un'operazione semplice z = x - y. Che dovrebbe essere facile da implementare. vale a dire Convertire le stringhe in numeri interi, ecc ed eseguire la differenza.

Grazie a tutti in anticipo!

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("   ");   
            }
        }

    }
È stato utile?

Soluzione

È possibile aggiungere un MouseListener ai campi di testo in modo da sapere quando l'utente è passato da X a Y e viceversa:

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;
        }
    });

Per fare la sottrazione, convertire il testo presente in X e Y per int e sottrarre. È possibile refactoring del actionPerformed a:

    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);
        }
    }

Altri suggerimenti

Questo sembra compiti a casa in modo da non sto per darvi i dettagli, in ogni caso

  1. , invece che usare setText si deve prima getText e poi concatenare il numero già presente con la nuova cifra
  2. è possibile utilizzare una variabile all'inizio del vostro actionPerformed e passare tra due campi di testo con un valore booleano per esempio. Per esempio. JTextField cur = first ? x : y
  3. basta leggere la documentazione delle classi Integer o String e troverete quello che vi serve (toString, valueOf, parse)

Tra l'altro ti ha risposto anche ieri e vi ha suggerito di non usare un altro catena di se / per ogni tasto poiché si sa che è il numero che viene mostrato .. esempio:

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

Questo significa che si sta sprecando un sacco di righe di codice ..

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top