2017-02-16 21 views
0

現在、電卓をjavaにしようとしています。私はすべての数字ボタン、操作、数字の表示などを作成しました。私はまた、すべてのボタンに機能を追加しました。すべてがうまくいきました。次に、ドットを挿入できるボタンを追加しました(小数点)。しかし、これは正しく挿入されていませんJTextField。ここでは、ボタン1、およびdotボタンのactionPerfomed()です....JTextFieldで文字が正しく挿入されない

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

あなたはJTextFieldは数1.次にdotボタンを押し示しoneボタンを押すと。 JTextFieldには「1」が表示されます。今はすべてが良いです。 1をもう一度押します。期待される結果は「1.1」ですが、代わりに「11」と表示されます。なぜこの奇妙な問題が発生していますか?それを修正するには?

+2

既存の文字列の前に*を追加しています。あなたは、あなたが番号でやっているのと同じ順序でそれを加えるべきです。 – RealSkeptic

+0

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

+0

あなたが説明したフロー+結果は、貼り付けたコードに適合していないと思います。 – Redlab

答えて

1

ActionListenersのロジックが異なります。あるケースでは、最初にボタンのテキストを追加します。それ以外の場合は、最後にボタンのテキストを追加します。

異なるActionListenerを使用せず、同じActionListenerを共有する方がよい場合は、ロジックはすべてのボタンで同じになり、複数のリスナーを作成する必要はありません。このようにして、間違いを起こす可能性は低くなります。

チェックアウトsetText method with panel and button

  • はので、ユーザーのキーバインディングを使用

    1. 各ボタン
    2. で共有する単一のActionListenerを作成したテキストを置き換えるのではなく、テキストフィールドにテキストを「追加」:この例では、どのようにする方法を紹介します数字だけを入力することもできます。
  • 関連する問題