文本字段的按钮操作侦听器不起作用

时间:2018-08-02 18:50:24

标签: java nullpointerexception jtextfield

我试图制作这个GUI程序,该程序可以通过文本字段从用户那里获取输入,并且应该以大写形式返回它:

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

public class gui {
 JTextField textField;
 JFrame frame;
 JButton button;

public static void main(String args[]) {
    gui tr = new gui();
    tr.go();
}

public void go() {  
    JFrame frame = new JFrame();
    JTextField textField = new JTextField("Type here);
    JButton button = new JButton("Send");
    button.addActionListener(new buttonListener());
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().add(BorderLayout.CENTER, textField);
    frame.getContentPane().add(BorderLayout.SOUTH, button);
    frame.setSize(300, 300);
    frame.setVisible(true);

}

class buttonListener implements ActionListener {
    public void actionPerformed(ActionEvent event) {
        String txt;
        txt = textField.getText();
        txt = txt.toUpperCase();
        textField.setText(txt);
    }
}
}

文件通过空指针异常响应。 Ive尝试添加异常处理程序,并根据Ive在网上看到的实例更改程序。请向我解释我的错误。 谢谢。

2 个答案:

答案 0 :(得分:1)

问题在于您的类成员JTextField textField从未被初始化,但是您正在尝试在actionPerformed中使用它

在您的go()方法内部,创建一个新的JTextField textField,它与原始textField无关。

实际上,在go()中,您基本上是在创建新对象

JFrame frame = new JFrame();
JTextField textField = new JTextField("Type here);
JButton button = new JButton("Send");

与其初始化已经为您的班级定义的内容。

答案 1 :(得分:0)

您正在go()方法内创建另一个局部变量。更改此:

JTextField textField = new JTextField(“Type here”);

收件人:

textField = new JTextField(“Type here”);