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

button action listener for text field doesnt work

我试图制作这个 GUI 程序,它通过文本字段从用户那里获取输入,并且应该 return 它具有大写转换:

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

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

问题是您的 class 成员 JTextField textField 从未初始化,但您正试图在 actionPerformed

中使用它

在您的 go() 方法中,您创建了一个与原始 textField.

无关的新 JTextField textField

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

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

而不是初始化那些已经为您的class定义的。

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

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

收件人:

textField = new JTextField(“Type here”);