Frage

I am a simple Konstruktion geändert Subtraction-only-Rechner, wo z = x - y. Ich habe 3 Textfelder erstellt: x, y, und z. Der Benutzer wird Eingang der Wert über die Tastatur (Tasten) I haben sich für die x und y ausgelegt.

Just von unten Blick auf den Code, gibt es einige Probleme sofort.

1) Die x-Textfeld akzeptiert nur eine Ziffer. (Ich will es 3 Stellen akzeptieren up). Alle Vorschläge, wie ich das sonst ändern kann, wenn Aussage, dass zu übernehmen?

2) Wenn ich mit dem x Textfeld fertig bin, will ich es mit dem gleichen mit dem y-Textfeld zu tun. Aber die Tasten sind streng auf die x-Textfeld zugeordnet. Es wäre ineffizient eine weitere Tastatur machen nur für y Textfeld. Also, wie kann ich zwischen x und y Textfeld ein. Gibt es einen Code, in dem, wenn der Benutzer die Cursor auf dem x Textfeld hat, wird die Tastatur für das x Textfeld reserviert ist und wenn die Benutzer Änderungen an der y Textfeld kann die Tastatur für den y dann verwendet werden.

3) Und wenn Benutzer Hits eingeben, sein eine einfache Bedienung z = x - y. Die leicht implementieren sollte. das heißt Konvertieren Sie die Saiten auf ganze Zahlen usw. und die Differenz durch.

Vielen Dank im Voraus!

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

    }
War es hilfreich?

Lösung

Sie können eine MouseListener die Textfelder hinzufügen, damit Sie wissen, wenn der Benutzer von x nach y und umgekehrt umgeschaltet hat:

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

die Subtraktion zu tun, wandelt den Text in x und y zu ints und subtrahiert. Sie können Ihre actionPerformed Refactoring:

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

Andere Tipps

Das scheint Hausaufgaben so werde ich nicht geben Sie Details sowieso

  1. stattdessen, dass setText verwenden, sollten Sie zuerst getText und dann verketten die bereits vorhandene Nummer mit der neuen Ziffer
  2. könnten Sie eine Variable am Anfang Ihres actionPerformed verwenden und wechseln zwischen zwei Textfeldern mit einem Booleschen Wert zum Beispiel. Z.B. JTextField cur = first ? x : y
  3. lesen Sie einfach die Dokumentation von Integer oder String Klassen und Sie werden feststellen, was Sie brauchen (toString, valueOf, parse)

Übrigens, antwortete ich Ihnen auch gestern und ich vorgeschlagen, dass Sie nicht eine if / else-Kette für jede Taste verwenden, da Sie wissen, welche ist die Zahl, die angezeigt wird .. Beispiel:

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

Das bedeutet, dass Sie eine Menge von Codezeilen verschwenden ..

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top