2012-11-10 56 views
0

我正在製作一個計算器,使用文本字段來顯示結果並允許用戶鍵入數字和操作(無需單擊按鈕)。在文本框中,當用戶鍵入一些東西時,我遇到了問題,如果它是一個有效的字符,我想在相應的按鈕中執行.doClick()。我可以看到按鈕上的模擬點擊,但「cerebro」方法沒有執行。哪裏有問題?謝謝。java jButton.doClick()不執行該功能(但點擊按鈕)

這是執行doClick()的代碼:

private void campotextoKeyPressed(java.awt.event.KeyEvent evt) { 
    char teclapulsada = evt.getKeyChar(); 

    switch(teclapulsada){ 
     case '0': b0.doClick(); 
        break; 
     case '1': b1.doClick(); 
        break; 
     case '2': b2.doClick(); 
        break; 
     case '3': b3.doClick(); 
        break; 
     case '4': b4.doClick(); 
        break; 
     case '5': b5.doClick(); 
        break; 
     case '6': b6.doClick(); 
        break; 
     case '7': b7.doClick(); 
        break; 
     case '8': b8.doClick(); 
        break; 
     case '9': b9.doClick(); 
        break; 
    } 

} 

而且這種方法使操作過程,當用戶點擊一個按鈕:

double operando1 = 0; 
double operando2 = 0; 
char operador = ' '; 
private void cerebro(java.awt.event.MouseEvent evt) {       
    javax.swing.JButton botonllamador = new javax.swing.JButton(); 
    botonllamador = (javax.swing.JButton) evt.getSource(); 

    try { 
     int pulsacion = Integer.parseInt(botonllamador.getText()); 
     if (pulsacion >= 0 && pulsacion <= 9) { 
      if (campotexto.getText().equals("0")) { 
       campotexto.setText(botonllamador.getText()); 
       System.out.println("HOLE 0"); 
      } else { 
       campotexto.setText(campotexto.getText() + botonllamador.getText()); 
       System.out.println("HOLA 1"); 
      } 
     } 
    } catch (Exception e) { 
     //Si pulsas algo que no sea un número 
     String operacion = botonllamador.getText(); 
     //Si ya hay un operador introducido, hacemos la operacion 
     if (operacion.equals("CE")) { 
      if(operador != ' '){ 
       int posoperador = campotexto.getText().indexOf(operador); 
       campotexto.setText(campotexto.getText().substring(0, posoperador+1)); 
      }else{ 
       campotexto.setText("0"); 
      } 
     } else if(operacion.equals("C")) { 
      operando1 = 0; 
      operador = ' '; 
      campotexto.setText("0"); 
      System.out.println("CAMPOTEXTO ES "+campotexto.getText()); 
     } else { 
      if (operador != ' ') { 
       //Si es un operador, buscamos la posicion, substring para el operando 2 y hacemos la operacion 
       int posoperador = campotexto.getText().indexOf(operador); 
       if (posoperador != (campotexto.getText().length()-1)) { 
        operando2 = Double.parseDouble(campotexto.getText().substring(posoperador + 1)); 
        if (operador == '+') { 
         System.out.println("CAMPOTEXTO TIENE "+campotexto.getText()); 
         System.out.println("ENTRO EN + Y AHORA CAMPOTEXTO TIENE"+campotexto.getText()+" EL OPERADOR ES "+operador+" OPERACION ES "+operacion); 
         operando1 = operando1 + operando2; 
        } else if (operador == '-') { 
         System.out.println("ENTRO EN - Y AHORA CAMPOTEXTO TIENE"+campotexto.getText()+" EL OPERADOR ES "+operador+" OPERACION ES "+operacion); 
         operando1 = operando1 - operando2; 
        } else if (operador == '*') { 
         System.out.println("ENTRO EN * Y AHORA CAMPOTEXTO TIENE"+campotexto.getText()+" EL OPERADOR ES "+operador+" OPERACION ES "+operacion); 
         operando1 = operando1 * operando2; 
        } else if (operador == '/') { 
         System.out.println("ENTRO EN/Y AHORA CAMPOTEXTO TIENE"+campotexto.getText()+" EL OPERADOR ES "+operador+" OPERACION ES "+operacion); 
         operando1 = operando1/operando2; 
        } else if (operador == '.'){ 
         operando1 = Double.parseDouble(campotexto.getText()); 
        }      

        if(operacion.charAt(0) == '.'){ 
         campotexto.setText(campotexto.getText()+"."); 
        }else if (operacion.charAt(0) != '=') { 
         operador = operacion.charAt(0); 
         campotexto.setText(operando1 + operacion); 
         System.out.println("ENTRO EN EL FINAL Y AHORA CAMPOTEXTO TIENE"+campotexto.getText()+" EL OPERADOR ES "+operador+" OPERACION ES "+operacion); 
        } else { 

         campotexto.setText(String.valueOf(operando1).toString()); 
         System.out.println("ENTRO EN = Y AHORA CAMPOTEXTO TIENE"+campotexto.getText()+" EL OPERADOR ES "+operador+" OPERACION ES "+operacion); 
         operador = ' '; 
         operando1 = 0; 
        } 
       } 
      } else { 
       //Si es la primera vez que se pulsa un operador 
       operador = botonllamador.getText().charAt(0); 
       operando1 = Double.parseDouble(campotexto.getText()); 
       if(operador == '='){ 
        operador=' '; 
       }else{ 
        System.out.println("EN EL ELSE RARO ES "+campotexto.getText()); 
        campotexto.setText(campotexto.getText() + operador); 
        System.out.println("FIN DEL ELSE RARO ES "+campotexto.getText()); 
       } 
      } 

     } 
    } 
} 
+2

我不確定,但似乎你使用了錯誤的聽衆。您應該更好地使用'ActionListener',因爲'doClick()'可能不會創建相應的'MouseEvent',因此不會通知您的偵聽器。你確認你的處理程序是否被執行了? –

回答

0

您可以顯示第二簽名你已經顯示的方法。 通常,它應該是實現接口的類(ActionListener as coding.mof所說)或擴展類(如MouseAdapter)的一部分,並且應該將該類設置爲偵聽按鈕上的操作(使用addActionListener之類的方法)。

+0

嗯...對不起,但即時通過這個。我使用netbeans和方法是自動創建的。該方法沒有另一個簽名...我該如何解決這個問題?謝謝 – user1814246