2017-02-16 6 views
0

Ich versuche gerade einen Rechner in java zu erstellen. Ich habe alle Nummerntasten, Operationen, Nummernanzeige usw. erstellt. Ich habe auch die Funktion zu jeder Taste hinzugefügt. Alles hat gut funktioniert. Dann fügte ich einen Knopf hinzu, durch den ich einen Punkt (Dezimalpunkt) einfügen konnte. Aber das wird nicht richtig in JTextField eingefügt. Hier ist die actionPerfomed() für die Taste 1 und dot Taste ....JTextField passt Zeichen nicht korrekt an

one.addActionListener(new ActionListener(){ 
    @Override 
    public void actionPerformed(ActionEvent e) { 

     numdisp.setText(numdisp.getText()+one.getText()); //numdisp is the number displayer(JTextField) 

    } 


//Other buttons like button2,button3,button4,etc.... are not mentioned as they have the same set of code.... 

dot.addActionListener(new ActionListener(){ 
    @Override 
    public void actionPerformed(ActionEvent e) { 
    numdisp.setText(dot.getText()+numdisp.getText()); 
    }); 

Download the jar file here

Wenn Sie die Taste one Taste die JTextField zeigt die Nummer 1. Dann drücken Sie die Taste dot. Die JTextField zeigt "1.". Bis jetzt ist alles gut. Drücken Sie dann erneut 1. Das erwartete Ergebnis ist "1.1", stattdessen wird "11." angezeigt. Warum tritt dieses seltsame Problem auf? Wie man es repariert?

+2

Sie fügen den Punkt * vor * die vorhandene Zeichenfolge hinzu. Sie sollten es in der gleichen Reihenfolge hinzufügen, wie Sie es in der Zahl tun. – RealSkeptic

+0

numdisp.setText (numdisp.getText() + "."); –

+0

Ich denke, dass der Flow + das Ergebnis, das Sie erklären, nicht dem Code entspricht, den Sie eingefügt haben. – Redlab

Antwort

1

Die Logik in Ihren ActionListeners ist anders. In einem Fall fügen Sie den Text der Schaltfläche am Anfang hinzu. Im anderen Fall fügen Sie den Text der Schaltfläche am Ende hinzu.

So eine bessere Lösung ist nicht anders ActionListeners zu verwenden, aber die gleiche Action zu teilen, so die Logik für alle Tasten gleich sein wird, und Sie müssen nicht mehrere Zuhörer erstellen. Auf diese Weise werden Sie weniger Fehler machen.

Auschecken setText method with panel and button. Dieses Beispiel zeigt Ihnen, wie Sie: eine einzige Action

  1. erstellen, indem Sie jede Taste
  2. „anhängen“, um den Text in das Textfeld zu ersetzen, den Text
  3. verwenden Key Bindings, damit der Benutzer stattdessen gemeinsam genutzt werden kann auch einfach die Nummer eingeben
Verwandte Themen