1

我需要使用 JtextPanel 从键盘获取输入,按 Enter 时将其保存在字符串中,然后使用该字符串根据输入中给出的行执行某些操作(例如“帮助”或“退出”)。我在 JTextPanel 的 KeyListener 中得到了这个:

...
public void keyPressed(KeyEvent e) {
     int key = e.getKeyCode();    

     if (key == KeyEvent.VK_ENTER) {
        inputString = textField.getText();
        textArea.append(inputString + "\n");
        textField.setText("");

        }
}
....

,但我不能直接调用这个方法。我需要类似的东西

String input = processInput();
    if((input).equals("help"))
          ............
    else if ((input).equals("go"))
          ............

并且 processInput 应该是一个等待 (key== KeyEvent.VK_ENTER) 的方法,就像您使用 C 中的 scanf 或 java 中的 bufferedReader 时发生的那样,它会等待您从键盘输入一个字符串,直到您按下回车键。编辑

我的应用程序管理这样的命令

while(!finished) {

    finished = processInput() 
}

processInput 管理输入中给出的命令。这就是为什么我不能从 keyListener 调用 processInput() 我希望我很清楚,我的英语太糟糕了!

谢谢

4

2 回答 2

0

我相信你被困在事件驱动界面的架构设计上。

这里的想法是你不要去“等待”输入或其他任何东西。您设置界面,附加 KeyListener(您确实有一个addKeyListener()地方,对...),然后您就完成了。你放弃控制流,让你的主要方法结束,完成。

当用户做了一些值得注意的事情时,你会处理它,所以说你有一个方法processText(String text),你会在你的 keylistener 中说processText(inputString);

因此,当用户输入某些内容并按 Enter 键时,它开始在 keyListener 中执行,它将控制流传递给processText()方法,该方法将根据该文本执行它应该执行的任何操作。

于 2012-05-24T08:50:31.130 回答
0

这个方法怎么样,很简单。

按键监听器:

...
public void keyPressed(KeyEvent e) {
     int key = e.getKeyCode();    

     if (key == KeyEvent.VK_ENTER) {
        inputString = textField.getText();
        textArea.append(inputString + "\n");
        textField.setText("");
        processInput(inputString); //crunch it
        }
}
....

和其他地方

public void processInput(String input) {
    if((input).equals("help"))
          ............
    else if ((input).equals("go"))
          ............
}
于 2012-05-24T08:51:03.267 回答