如何将文本框中的输入存储在字符串中?

How can I store the input from a text box in a string?

JTextField player1Text = new JTextField();
player1Text.setSize(400, 400);
inputWindow.add(player1Text);
System.out.println(player1Text.getText().length());

即使我在 window 中出现的文本框中输入了一些文本,这也将打印为零。然而,

JTextField player1Text = new JTextField("input");
player1Text.setSize(400, 400);
inputWindow.add(player1Text);
System.out.println(player1Text.getText().length());

这将打印 5,因为那是 "input" 的长度。我该怎么做才能获得实际的输入文本?

编辑:这是我现在的全部代码。每当我 运行 它时,我都会得到一个空指针异常。

public class NamesInterface extends JFrame implements ActionListener {

    Player player1;
    Player player2;
    JTextField player1Text; 
    JTextField player2Text;
    JButton startButton = new JButton("Start");

    public NamesInterface() throws UnexpectedFormatException, IOException {

        super();
        setSize(500, 1000);
        setLayout(new BorderLayout());
        setVisible(true);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);

        JPanel inputWindow = new JPanel();

        inputWindow.setSize(500, 200);
        inputWindow.setLayout(new GridLayout(3, 1));

        inputWindow.add(new JLabel("Enter Player 1 name:"));
        JTextField player1Text = new JTextField();
        player1Text.setSize(400, 400);
        inputWindow.add(player1Text);

        inputWindow.add(new JLabel("Enter Player 2 name:"));
        JTextField player2Text = new JTextField();
        player2Text.setSize(400, 400);
        inputWindow.add(player2Text);

        startButton.setSize(500, 500);
        startButton.addActionListener(this);
        inputWindow.add(startButton);

        this.add(inputWindow, BorderLayout.CENTER);



        this.validate();

    }

    @Override
    public void actionPerformed(ActionEvent e){

        if (e.getSource() == startButton) {

            System.out.println(player1Text.getText());
            System.out.println(player2Text.getText());

            System.exit(0);
        }
    }

引发的异常:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at eg.edu.guc.yugioh.gui.NamesInterface.actionPerformed(NamesInterface.java:64)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6525)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3322)
    at java.awt.Component.processEvent(Component.java:6290)
    at java.awt.Container.processEvent(Container.java:2234)
    at java.awt.Component.dispatchEventImpl(Component.java:4881)
    at java.awt.Container.dispatchEventImpl(Container.java:2292)
    at java.awt.Component.dispatchEvent(Component.java:4703)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
    at java.awt.Container.dispatchEventImpl(Container.java:2278)
    at java.awt.Window.dispatchEventImpl(Window.java:2739)
    at java.awt.Component.dispatchEvent(Component.java:4703)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:751)
    at java.awt.EventQueue.access0(EventQueue.java:97)
    at java.awt.EventQueue.run(EventQueue.java:702)
    at java.awt.EventQueue.run(EventQueue.java:696)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain.doIntersectionPrivilege(ProtectionDomain.java:75)
    at java.security.ProtectionDomain.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.awt.EventQueue.run(EventQueue.java:724)
    at java.awt.EventQueue.run(EventQueue.java:722)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain.doIntersectionPrivilege(ProtectionDomain.java:75)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:721)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

这是因为您没有告诉程序等待将文本输入到 TextField 中,而是您正在获取正在初始化 TextField 的文本。

您对此的回答将是以下两件事之一:

Create a KeyListener on the TextField 将监听按下的 Enter 键然后打印出文本或打印出与输入的文本同时出现的文本,

创建一个具有 ActionPerformed 函数的按钮,该函数将获取在字段中输入的文本。

另请注意,根据您向我们展示的内容;没有代码可以获取文本的长度!第二个片段将简单地打印出 "input" 到控制台。

为了获得您必须声明的长度 "inputBox.length();"

UPDATE

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

public class NamesInterface extends JFrame{

    JTextField player1Text; 
    JTextField player2Text;
    Player player1;
    Player player2;
    JButton startButton;

    public NamesInterface(){

        super();
        setSize(500, 1000);
        setLayout(new BorderLayout());

        this.setDefaultCloseOperation(EXIT_ON_CLOSE);

        JPanel inputWindow = new JPanel();

        inputWindow.setSize(500, 200);
        inputWindow.setLayout(new GridLayout(3, 1));

        inputWindow.add(new JLabel("Enter Player 1 name:"));
        JTextField player1Text = new JTextField();
        player1Text.setSize(400, 400);
        inputWindow.add(player1Text);

        inputWindow.add(new JLabel("Enter Player 2 name:"));
        JTextField player2Text = new JTextField();
        player2Text.setSize(400, 400);
        inputWindow.add(player2Text);

        startButton  = new JButton("Start");
        startButton.setSize(500, 500);
        startButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e){
                System.out.println(player1Text.getText());
                System.out.println(player2Text.getText());
            }
        });
        inputWindow.add(startButton);

        this.add(inputWindow, BorderLayout.CENTER);
        setVisible(true);
    }
}

希望对您有所帮助。

让我知道结果。

您是否在用户点击按钮后打印文本,例如 "Submit"?据我所知,您需要创建某种操作,以便程序知道何时获取您输入的文本。完成后,使用 player1Text.getText() 并打印文本。

button.addActionListener(new ActionListener() {
      public void actionPerfomed(ActionEvent ae){
         //get your text data from here
  }