Java JTextfield-字符串拆分和intparse
我正在处理一个turtle graphics项目,我正在尝试从jtextfield(commField)检索用户输入,它应该是这样的:“forward 100”我已经尝试进行字符串拆分和intparse,但是当程序运行时,即使输入了正确的命令,它也会转到消息错误对话框。几个小时的脑筋急转弯后,我正努力想明白为什么,所以我请求任何帮助。如果我需要更多的代码来得到一个好的答案,也许我的注意力放错了地方Java JTextfield-字符串拆分和intparse,java,string,swing,parsing,split,Java,String,Swing,Parsing,Split,我正在处理一个turtle graphics项目,我正在尝试从jtextfield(commField)检索用户输入,它应该是这样的:“forward 100”我已经尝试进行字符串拆分和intparse,但是当程序运行时,即使输入了正确的命令,它也会转到消息错误对话框。几个小时的脑筋急转弯后,我正努力想明白为什么,所以我请求任何帮助。如果我需要更多的代码来得到一个好的答案,也许我的注意力放错了地方 commField.addActionListener(new ActionListener()
commField.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
else if(commField.getText().contains("forward")) {
String cForward = commField.toString();
String[] cForwardArray = cForward.split("\\s+");
try {
int distance = Integer.parseInt(cForwardArray[1]);
graphicsPanel.forward(distance);
}
catch (Exception ev) {
JOptionPane.showMessageDialog(textArea,
"Invaild or missing parameter, check the help section\n"
+ "for more information on Commands");
}
}
else if(commField.getText().contains("backward")) {
String cBackward = commField.toString();
String[] cBackwardArray = cBackward.split("\\s+");
try {
int distance = Integer.parseInt(cBackwardArray[1]);
graphicsPanel.backward(distance);
graphicsPanel.repaint();
}
catch (Exception ev) {
JOptionPane.showMessageDialog(textArea,
"Invaild or missing parameter, check the help section\n"
+ "for more information on Commands");
}
}
}
});
下面是需要它的人的完整代码块:
commField.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(commField.getText().contains("penup")) {
graphicsPanel.penUp();
}
else if(commField.getText().contains("pendown")) {
graphicsPanel.penDown();
}
else if(commField.getText().contains("turnright")) {
graphicsPanel.turnRight();
}
else if(commField.getText().contains("turnleft")) {
graphicsPanel.turnLeft();
}
else if(commField.getText().contains("forward")) {
String cForward = commField.toString();
String[] cForwardArray = cForward.split("\\s+");
try {
int distance = Integer.parseInt(cForwardArray[1]);
graphicsPanel.forward(distance);
System.out.println(commField);
}
catch (Exception ev) {
JOptionPane.showMessageDialog(textArea,
"Invaild or missing parameter, check the help section\n"
+ "for more information on Commands");
}
}
else if(commField.getText().contains("backward")) {
String cBackward = commField.toString();
String[] cBackwardArray = cBackward.split("\\s+");
try {
int distance = Integer.parseInt(cBackwardArray[1]);
graphicsPanel.backward(distance);
graphicsPanel.repaint();
}
catch (Exception ev) {
JOptionPane.showMessageDialog(textArea,
"Invaild or missing parameter, check the help section\n"
+ "for more information on Commands");
}
}
else if(commField.getText().contains("black")) {
graphicsPanel.black(Color.black);
}
else if(commField.getText().contains("green")) {
graphicsPanel.green(Color.green);
}
else if(commField.getText().contains("red")) {
graphicsPanel.red(Color.red);
}
else if(commField.getText().contains("reset")) {
graphicsPanel.clear();
}
else {
JOptionPane.showMessageDialog(textArea, "Invalid command, try again");
}
commField.setText("");
graphicsPanel.repaint();
}
});
兴趣线:
String cForward = commField.toString();
JTextField.toString()
不返回JTextField
的内容
我检查了java 8源代码,发现如下内容:
public String toString() {
return getClass().getName() + '[' + paramString() + ']';
}
但是,toString()
方法是一个调试实用程序。除非明确记录其行为,否则不建议以编程方式依赖它
对于检索其文本内容,JTextField
提供了一个单独的方法:。因此,该行应改为:
String cForward = commField.getText();
在我有限的测试中,代码的概念似乎还可以。但是,我个人会使用
String#startsWith
overcontains
。您应该在代码中添加更多的测试条件(if(cForwardArray.length>1){…}
和System.out.println
语句来测试实际添加了哪些变量完整的代码块也为那些请求hanks的人我会尝试实现您的建议对于调试打印出任何发生的异常的堆栈跟踪是非常有帮助的工具,我相信我之前的代码中确实有,但删除了它omly很沮丧。谢谢提醒我!@Thrable WombatNice spot,错过thatAh,很有趣。那么哪种方法更合适呢?谢谢回答。