2017-02-16 11 views
0

Я в настоящее время пытаюсь сделать калькулятор в java. Я создал все числовые кнопки, операции, отображение номеров и т. Д. Я также добавил функцию к каждой кнопке. Все работало хорошо. Затем я добавил кнопку, через которую я мог бы вставить точку (десятичную точку). Но это неправильно вставлено в JTextField. Вот actionPerfomed() для кнопки 1 и dot кнопка ....JTextField dosen't правильно вставить символы

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

При нажатии на кнопку oneJTextField показывает номер 1. Затем нажмите кнопку dot. На рисунке JTextField отображается «1.». До сих пор все хорошо. Затем снова нажмите 1. Ожидаемый результат: «1,1», но вместо этого отображается «11.». Почему возникает эта странная проблема? Как это исправить?

+2

Вы добавляете точку * до * существующей строки. Вы должны добавить его в том же порядке, что и в номере. – RealSkeptic

+0

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

+0

Я думаю, что поток + результат, который вы объясняете, не соответствует введенному вами коду. – Redlab

ответ

1

Логика в вашем ActionListeners отличается. В одном случае вы добавляете текст кнопки в начале. В другом случае вы добавляете текст кнопки в конце.

Итак, лучшее решение - не использовать разные ActionListeners, а делиться одним и тем же ActionListener, поэтому логика будет одинаковой для всех кнопок, и вам не нужно создавать несколько прослушивателей. Таким образом, вы вряд ли допустите ошибки.

Отъезд setText method with panel and button. Этот пример покажет вам, как:

  1. создать единый ActionListener для совместного использования каждой кнопкой
  2. «добавить» текст в текстовом поле вместо того, чтобы заменить текст
  3. использовать привязки ключей, так что пользователь также можете набрать номер