java - 程序不将 JFrame 文本字段值与其他类中生成的数字进行比较

标签 java jframe

我做了一个小的随机数学生成器,它给出了 2 个随机数和一个随机运算符,但是当我在“确定”按钮中调用检查结果方法时,我总是得到“Errado”(“错误”)字符串,这意味着它是没有正确地将文本字段的值与提出的任何数学问题的结果进行比较。将两个类的相关代码留在此处,并附上对我遇到问题的地方的注释和 2 以便于理解。感谢帮助!

public class geraAritmetica {
    ArrayList<Integer> nums = new ArrayList();
    int a;
    char ops = '?';
    int max = 10;
    int min = 1;
    int range = max - min + 1;
    int res;

    Random r = new Random();
    
    public int gerarNums(){
        for(int i = 0; i<10; i++){
            a = (int) (Math.random()*range) + min;
            nums.add(a);
        }
        return a;
    }
    
    public char gerarOps(){
        switch(r.nextInt(4)){
            case 1 : ops = '+';
                     res = nums.get(0) + nums.get(1);
            break;
            case 2: ops = '-';
                    res = nums.get(0) - nums.get(1);
                    break;
            case 3: ops = '*';
                    res = nums.get(0) * nums.get(1);
                    break;
            case 4: ops = '/';
                    res = nums.get(0) / nums.get(1);
                    break;    
            
            default: ops = '+';
                     res = nums.get(0) + nums.get(1);
            break;
        }
        return ops;
    }
        
        public boolean checkRes(){   //everytime I call this method always get the same string "Errado" ("Wrong") in the label.          
            if(Integer.parseInt(FrameEnsinoAritmetica.jTextField1.getText()) == res){
                FrameEnsinoAritmetica.jLabel2.setText("Correto!");
                return true;
            }
            else FrameEnsinoAritmetica.jLabel2.setText("Errado!");
            return false;
        }
        
    }

public class FrameEnsinoAritmetica extends javax.swing.JFrame {
   geraAritmetica a = new geraAritmetica(); //creating object of class at the start of my JFrame class
    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {  //generating numbers and operator (it prints fine in another label)                                       

        int b = a.gerarNums();
        int c = a.gerarNums();
        char s = a.gerarOps();
        
        jLabel1.setText(b + " " +s+ " " + c);
    }                                        

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                            
        a.checkRes(); //everytime I call this method always get the same string "Errado" ("Wrong") in the label.          
    }  

最佳答案

您似乎直接引用 FrameEnsinoAritmetica 类,而不是您在屏幕上看到的 FrameEnsinoAritmetica jFrame 的实际实例。例如,在另一个类中使用它不会引用您在屏幕上看到的框架:

String text = FrameEnsinoAritmetica.jTextField1.getText();

但是使用这个会起作用:

String text = yourInstanceOfEnsinoAritmetica.jTextField1.getText();

要解决此问题,我们可以将屏幕上显示的 FrameEnsinoAritmetica 的当前实例传递到 checkRes 方法中,这是通过修改 checkRes 来实现的code> 像这样,在方法中我们将 FrameEnsinoAritmetica 替换为 frame 以引用当前实例:

    public boolean checkRes(FrameEnsinoAritmetica frame){   //everytime I call this method always get the same string "Errado" ("Wrong") in the label.          
        if(Integer.parseInt(frame.jTextField1.getText()) == res){
            frame.jLabel2.setText("Correto!");
            return true;
        }
        else frame.jLabel2.setText("Errado!");
        return false;
    }

然后我们只需更新 jButton1ActionPerformed 方法,将 this(即 FrameEnsinoAritmetica 的当前实例)传递到更新后的 checkRes方法:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                            
    a.checkRes(this); //everytime I call this method always get the same string "Errado" ("Wrong") in the label.          
} 

关于java - 程序不将 JFrame 文本字段值与其他类中生成的数字进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72863075/

相关文章:

java - 打印flink KeyedStream

java - JFrame 按钮彼此靠近

java - 在 Swing 中显示一个弹出窗口,指示程序启动的进度

java - JFrame 不重绘

java - 在 JButton OnclickListener 中编辑 JLabel 文本

Java : ProgressBar does not display when click on the button

java - 您将如何在 Java Web 环境中实现 RSS 提要?

java - 如何从桌面应用程序调用我们的网络服务获取公共(public)IP

Java-读取xml文件

java - Drupal-6/PHP 到 Java 数据检索