【问题标题】:Sending Variables to Method for addition将变量发送到方法以进行添加
【发布时间】:2020-08-31 19:08:58
【问题描述】:

我一直在实现一个使用JTextField 将两个数字相加的程序。

我已经能够让它运行,但是我想更改代码,以便将来自 JTextField 的值发送到方法文件(位于同一文件夹中)以添加在一起。添加值后,我希望将答案发送回第三个JTextField 以显示答案。我已经设置好了,当按下JButton 时,会调用该方法,但是我不知道如何编写该方法并在第三个JTextField 中获得答案。

这是我的代码,A 类是格式,B 类是方法文件:

import javax.swing.*;
import java.awt.event.*;

public class A implements ActionListener {
    JTextField tf1, tf2, tf3;
    JButton b1;
    
    A() {
        JFrame f = new JFrame();
        JLabel myLabel = new JLabel("Enter First Value");
        myLabel.setBounds(50, 50, 150, 20);
        tf1 = new JTextField();
        tf1.setBounds(50, 75, 250, 20);
        JLabel mysecondLabel = new JLabel("Enter Second Value");
        mysecondLabel.setBounds(50, 125, 150, 20);
        tf2 = new JTextField();
        tf2.setBounds(50, 150, 250, 20);
        tf3 = new JTextField();
        tf3.setBounds(160, 225, 140, 20);
        tf3.setEditable(false);
        b1 = new JButton("Sum");
        b1.setBounds(50, 225, 95, 20);
        b1.addActionListener(this);

        f.add(tf1);
        f.add(myLabel);
        f.add(tf2);
        f.add(mysecondLabel);
        f.add(tf3);
        f.add(b1);
        f.setSize(300, 300);
        f.setLayout(null);
        f.setVisible(true);
    }
    
    public void actionPerformed(ActionEvent e) {
        String s1 = tf1.getText();
        String s2 = tf2.getText();
        int x = Integer.parseInt(s1);
        int y = Integer.parseInt(s2);
        int z = 0;
        if (e.getSource() == b1) {
            B b = new B();
            b.mymethod();
        }
        String result = String.valueOf(z);
        tf3.setText(result);
    }
    
    public static void main(String[] args) {
        new A();
    }
}
import javax.swing.*;  
import java.awt.event.*;

public class B {
    
   public static void mymethod() {
       int x, y;
       int z = x + y; 
   }      
}

【问题讨论】:

  • B.myMethod() 不应编译。 x、y、z 未定义。你需要参数。
  • @NomadMaker 感谢您的回复。你能详细说明一下吗?
  • 类似于 ``public static int myMethod(int x, int y) { return x + y; }

标签: java methods addition


【解决方案1】:

你可能想做这样的事情:

try {
  int a = Integer.valueOf(tf1.getText());
  int b = Integer.valueOf(tf2.getText());
  int sum = a + b;
  tf3.setText(Integer.toString(sum));
} catch (NumberFormatException e) {
  tf3.setText("Evaluation error: " + e.getMessage();
}

顺便说一句,您的辅助方法mymethod() 可能应该接受参数并返回一个值,而不是将其分配给另一个局部变量?

static int sum(int a, int b) {
  return a + b;
}

【讨论】:

    【解决方案2】:

    你有一个JButton,你已经在其中定义了:b1.addActionListener(this); - 这行说“当调用 jbutton 时,执行 this 引用的 actionListener .... this 'implements' @987654326 @,这意味着你的类有一个方法:actionPerformed,它接收一个ActionEvent(它基本上告诉动作侦听器事件的起源)。

    因为您的类实现了 ActionListener 方法actionPerformed(),所以当您的按钮被点击时,该方法就会被调用。

    您的 actionPerformed 方法尝试通过调用 mymethod()B 获取值,但这不起作用。这是因为变量只对类B 是本地的。如果您希望它们出现在 A 类中,您需要声明类 B 更像:

    public class B {
        
        public static int x() {
            return 5;
        }
    
        public static int y() {
            return 15; 
        }
    
        public static int mymethod(int x, int y) {
            return x + y;
        }
    }
    

    那么对于A类的action执行方法你会写:

    public void actionPerformed(ActionEvent e) {  
        if(e.getSource()!=b1){  
            return;  
        }
        String s1 = tf1.setText(B.x()); // X
        String s2 = tf2.setText(B.y()); // Y
        
        int x = Integer.parseInt(s1.getText());
        int y = Integer.parseInt(s2.getText());
                   
        String result = B.mymethod(x, y);
    
        tf3.setText(result);  // set the value of tf3 to X + Y
    }  
    

    如果您想让按钮只添加文本字段中的任何内容,您可以删除将文本设置为 B.x()B.y() 的两行。

    请注意,如果您将除有效整数之外的任何内容放入两个文本字段中,则会发生异常。你可能想要处理这些。整数也有一个最大值,所以简单地将两个整数相加将在(2^31) - 1 处达到最大值,请参阅:https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#MAX_VALUE

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-24
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多