1

我正在使用文本字段制作计算器以显示结果并允许用户键入数字和操作(无需单击按钮)。在文本字段中,当用户键入内容时我遇到问题,如果它是有效的字符,我想在相应的按钮中执行 .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());
                }
            }

        }
    }
} 
4

1 回答 1

0

你能显示你已经显示的第二种方法的签名吗?通常,它应该是实现接口的类的一部分(ActionListener as coding.mof 所说)或扩展类(如 MouseAdapter),并且该类应设置为侦听按钮上的操作(使用 addActionListener 之类的方法)。

于 2012-11-10T10:08:47.697 回答