我用元素(“ A”,“ B”,“ C”)创建了数组 如果用户在输出标签(例如outputLabel.setText(array [0]))上输入“ 0”,则输出“ A”。
当我输入正确的数字时,我只是在命令提示符中出现错误。任何帮助,将不胜感激。我已经正确创建了GUI。只是不确定数组和输出。
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class GuiFrame extends JFrame implements ActionListener {
String[] stringArray = {"A", "B", "C"};
JTextField inputArea;
JLabel theOutputLabel;
public GuiFrame() {
JPanel panel = new JPanel();
JLabel label1 = new JLabel("Please enter the index of the array to
output: ");
JLabel outputLabel = new JLabel("Array index");
JTextField userInput = new JTextField ();
JButton inputButton = new JButton("Go");
String inputFromUser = userInput.getText();
Container contentPane = getContentPane();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel.add(label1);
panel.add(outputLabel);
panel.add(userInput);
panel.add(inputButton);
inputButton.addActionListener(this);
contentPane.add(panel);
setSize(250, 250);
setVisible(true);
userInput.setSize(250,50);
System.out.println(inputFromUser);
String stringArray[] = new String[3];
}
public static void main(String[] args){
new GuiFrame();
}
@Override
public void actionPerformed(ActionEvent e) {
String userInput = inputArea.getText();
try {
do {
if (e.getActionCommand().equals("0"))
theOutputLabel.setText(stringArray[0]);
if (e.getActionCommand().equals("1"))
theOutputLabel.setText(stringArray[1]);
if (e.getActionCommand().equals("2"))
theOutputLabel.setText(stringArray[2]);
}while(e.getActionCommand().equals("0") || e.getActionCommand().equals("1") || e.getActionCommand().equals("2"));
System.out.println("You have entered a number that is outside of the range of the array index please try again");
}
catch (ArrayIndexOutOfBoundsException arrayError){
System.out.println("Array Index Out of Bounds");
arrayError.printStackTrace();
}
}
}
答案 0 :(得分:2)
您现在拥有的东西无法达到使用数组的目的。想象一下,您必须对字母表中的所有字母都这样做,您会添加26个条件吗?如果您有成千上万种选择怎么办?
因此,而不是
/** DON'T DO THIS */
if (e.getActionCommand().equals("0"))
theOutputLabel.setText(stringArray[0]);
if (e.getActionCommand().equals("1"))
theOutputLabel.setText(stringArray[1]);
if (e.getActionCommand().equals("2"))
theOutputLabel.setText(stringArray[2]);
您应该解析输入并根据索引从数组中获取元素。
/** DO THIS */
int index = Integer.parseInt(e.getActionCommand());
theOutputLabel.setText(stringArray[index]);
如果输入不是有效的整数, Integer.parseInt()
可能会抛出java.lang.NumberFormatException
,因此您必须为此添加一个捕获。
如果要在index
条件下测试while
,请在do
块之前声明它而不进行初始化。
答案 1 :(得分:0)
除了@isapir提出的建议外,还请检查代码中是否有少数地方会导致 NullPointerExceptions :
JTextField inputArea; // Not assigned will lead to NPE
JLabel theOutputLabel; // Not assigned will lead to NPE
String userInput = inputArea.getText(); // Because of inputArea unassigned this line will throw NPE for sure so fix that as well.
所以我假设您在cmdPrompt中遇到的异常是NPE,因此最好先修复基本错误并正确检查构造函数代码。最后,在SO上发布问题之前最好共享异常详细信息。
e.getActionCommand().equals("0")
,此行不会显示您在框架弹出窗口中输入的内容。也请选中此复选框,而使用inputArea.getText()
将为您提供用户输入的数字位数。