如果用户在输出标签中输入“0”输出“A”,我已经用元素(“A”,“B”,“C”)创建了数组,例如outputLabel.setText(array [0])。
当我输入正确的数字时,我只是在命令提示符中出错。任何帮助都将受到高度赞赏。我正确地创建了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();
}
}
}
你现在所拥有的就是使用数组的目的。想象一下,你必须为Alphabet的所有字母做这件事,你会增加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
,所以你必须为此添加一个catch。
如果你想让index
可以在while
条件下进行测试,那么在do
块之前声明它而不进行初始化。
除了@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,所以最好先修复你的基本bug并正确检查你的构造函数代码。最后,在发布关于SO的问题之前分享异常详细信息总是更好。
e.getActionCommand().equals("0")
此行不会给出您在框架弹出窗口中输入的内容。检查这一点而不是使用inputArea.getText()
将给你用户输入的数字。