1

テキストフィールドを使用して結果を表示し、ユーザーが(ボタンをクリックせずに)数値と操作を入力できるようにする電卓を作成しています。テキストフィールドでは、ユーザーが何かを入力すると問題が発生します。有効な文字であれば、対応するボタンで .doClick() を実行したいと考えています。ボタンのシミュレートされたクリックを見ることができますが、「cerebro」メソッドは実行されません。問題はどこだ?ありがとう。

これは 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());
                }
            }

        }
    }
} 
4

1 に答える 1

0

すでに示した2番目のメソッドの署名を示していただけますか。通常、インターフェイスを実装するクラス(coding.mofのようにActionListener)の一部であるか、クラス(MouseAdapterなど)を拡張する必要があり、そのクラスはボタンのアクションをリッスンするように設定する必要があります(addActionListenerなどのメソッドを使用)。

于 2012-11-10T10:08:47.697 に答える