2017-02-16 1 views
0

현재 계산기를 java에 만들려고합니다. 모든 숫자 버튼, 작업, 숫자 디스플레이 등을 만들었습니다. 모든 버튼에 기능을 추가했습니다. 모든 것이 잘 작동했다. 그런 다음 점을 삽입 할 수있는 버튼을 추가했습니다 (소수점). 그러나 이것은 적절하게 삽입되지 않았습니다 JTextField. 여기 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

당신이 one 버튼을 JTextField는 숫자 1이 그 다음 dot 버튼을 누르면 표시 누르면 .... 버튼 1, 및 dot 버튼의 actionPerfomed()입니다. 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를 만들 텍스트를 교체하는 대신 텍스트 필드에 텍스트를 "추가":이 예는 어떻게하는 방법을 보여줍니다 숫자 만 입력해도됩니다.
  • 관련 문제