发送变量到方法进行加法

问题描述

我一直在执行一个程序,以使用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,20);
        tf2 = new JTextField();
        tf2.setBounds(50,20);
        tf3 = new JTextField();
        tf3.setBounds(160,225,140,20);
        tf3.setEditable(false);
        b1 = new JButton("Sum");
        b1.setBounds(50,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; 
   }      
}

解决方法

您可能想要执行以下操作:

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;
}
,

您在其中定义了JButtonb1.addActionListener(this);-此行说:“在调用jbutton时,执行this所引用的actionListener...。{{ 1}}“实现” this,这意味着您的类有一个方法:ActionListener,它接收一个actionPerformed(实际上是告诉动作侦听器该事件的起源)。

因为您的类实现了ActionListener方法ActionEvent,所以单击按钮时将调用该方法。

您的actionPerformed方法尝试通过调用actionPerformed()来从B获取值,这是行不通的。这是因为变量仅在类mymethod()中是局部的。如果希望它们出现在类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

如果您希望按钮仅添加文本字段中的内容,则只需删除将文本设置为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()处最大,请参见:https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#MAX_VALUE