Java 我的JTextField怎么了?
我正在尝试为一个小游戏制作一个应用程序,目前我遇到了一个让代码正常工作的问题。它应该显示一个带有文本字段、jbutton和不可编辑文本字段的窗口。我需要让它读取我在第一个文本字段中输入的内容。然而,当我运行它时,我收到的是:Java 我的JTextField怎么了?,java,user-input,jtextfield,Java,User Input,Jtextfield,我正在尝试为一个小游戏制作一个应用程序,目前我遇到了一个让代码正常工作的问题。它应该显示一个带有文本字段、jbutton和不可编辑文本字段的窗口。我需要让它读取我在第一个文本字段中输入的内容。然而,当我运行它时,我收到的是: Exception in thread "main" java.lang.NumberFormatException: For input string: "Enter Command" at sun.misc.FloatingDecimal.readJavaFormat
Exception in thread "main" java.lang.NumberFormatException: For input
string: "Enter Command"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1222)
at java.lang.Double.parseDouble(Double.java:510)
at TextAdv.<init>(TextAdv.java:16)
at TextAdv.main(TextAdv.java:43)
您正在尝试分析jtfCommand字段的值,该字段为Enter命令: 如果jtfCommand.getText返回的字符串不是数字,则此行将引发NumberFormatException 您应该知道,以下代码行使用初始化为第一个参数的文本值创建JTextField实例:
当您调用jtfCommand.getText时,它返回的Enter命令显然不是一个数字。您是否阅读了javadocs,因为第一列是文本,不能转换为双精度,因为错误消息状态字段中的文本是Enter命令,显然不是数字。您以程序化的方式思考,这不是GUI的工作方式,它们以事件驱动的方式工作,您会对发生的事情做出响应it@MadProgrammer如何使用字符串输入而不是数字输入?我对这一切都是全新的,我正在尽我最大的努力。如果这是一个相对容易的困境,请提前道歉。JTextField将只处理字符串值。在将来的某个时候,您需要从文本字段中获取值并进行转换,这可能会导致错误,您需要准备好处理该错误。JTextField支持ActionListener API,但您也可以使用另一个按钮。一个更复杂的解决方案是使用JFormattedTextField,但您可能会发现这有点过头了head@MadProgrammer我想我找到了另一种方法来做我想做的事情,你向我解释了为什么它要做我想做的事情,谢谢!
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class TextAdv {
JFrame jtfMainFrame;
JButton jbnButton2;
JTextField jtfInput, jtfCommand;
JPanel jplPanel, jplPanel2;
public TextAdv() {
jtfMainFrame = new JFrame("TextAdv");
jbnButton2 = new JButton("Quit (LEAVES GAME)");
jtfInput = new JTextField(55);
jtfCommand = new JTextField("Enter Command", 40);
double command = Double.parseDouble(jtfCommand.getText());
jplPanel = new JPanel();
jplPanel2 = new JPanel();
jbnButton2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
jtfInput.setEditable(false);
jplPanel.setLayout(new FlowLayout());
jplPanel.add(jtfCommand);
jplPanel.add(jbnButton2);
jplPanel2.add(jtfInput);
jtfMainFrame.getContentPane().add(jplPanel2, BorderLayout.SOUTH);
jtfMainFrame.getContentPane().add(jplPanel, BorderLayout.CENTER);
jtfMainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jtfMainFrame.pack();
jtfMainFrame.setVisible(true);
}
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager
.getCrossPlatformLookAndFeelClassName());
} catch (Exception e) {
}
TextAdv application = new TextAdv();
}
}
double command = Double.parseDouble(jtfCommand.getText());
jtfCommand = new JTextField("Enter Command", 40);