我只能告诉你什么原因,还有帮你改了.代码在下面
这是类文件,帮你封装了一下.
- import java.awt.Button;
- import java.awt.FlowLayout;
- import java.awt.Frame;
- import java.awt.Label;
- import java.awt.TextField;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.awt.event.WindowAdapter;
- import java.awt.event.WindowEvent;
- public class MyFrame{
-
- private TextField t1 ;
- private TextField t2 ;
- private TextField t3 ;
- private Button equal;
- private Label add;
- private Frame frame ;
-
- public MyFrame(){
- frame = new Frame();
- frame.setLayout(new FlowLayout());
- frame.setBounds(0, 0, 400, 50);
- equal = new Button();
- equal.setSize(100,100);
- equal.setLabel("=");
- equal.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- Integer val = Integer.parseInt(t1.getText())+Integer.parseInt(t2.getText());
- t3.setText(val.toString());
- }
- });
-
- t1 = new TextField("",10);
- t2 = new TextField("",10);
- t3 = new TextField("",10);
-
- t1.setSize(200, 200);
- add = new Label("+");
-
- frame.setVisible(true);
-
- frame.add(t1);
- frame.add(add);
- frame.add(t2);
- frame.add(equal);
- frame.add(t3);
-
- frame.pack();
- frame.addWindowListener(new WindowAdapter() {
- @Override
- public void windowClosing(WindowEvent e){
- System.exit(0);
- }
- });
- }
-
- }
复制代码
这是主文件
- public class Testview {
- public static void main(String[] args) {
- MyFrame my = new MyFrame();
-
- }
- }
-
复制代码
原因是因为你触发事件的代码块
- TextField t1 ;
- TextField t2 ;
- TextField t3 ;
- public void actionPerformed(ActionEvent e) {
- t3.setText(Integer.parseInt(t1.getText())+Integer.parseInt(t2.getText())+"");
- }
复制代码
的这几个文本框跟你在窗口显示的不是同一个.这样说可懂?
在你窗口显示的是你在main新建的.有自己的内存地址.并添加到frame中.
但是在你触发事件代码里面你又写了几个文本框.但是这几个文本框和你frame中的不是同一个地址.所以首先那拿到的是空指针异常,因为你尝试获取没有NEW操作对象的值.好好理解下类,对象,作用域 |