如何将文本框中的输入存储在字符串中?
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
}
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
}