我需要使用JtextPanel从键盘获取输入,当我按Enter键时将其保存在字符串上,然后使用该字符串根据输入中给出的行执行某些操作(例如“help”或“quit”)。我在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()的原因 我希望我很清楚,我的英语太糟糕了!
感谢
答案 0 :(得分:0)
我相信你会坚持使用事件驱动界面的架构设计。
这里的想法是你不要“等待”输入或其他什么。你设置了界面,附上了KeyListener(你确实在某处有addKeyListener()
,对......),然后你就完成了。你放弃了控制流程,让你的主要方法结束,完成。
当用户做了值得注意的事情时,你会处理它,所以说你有一个方法processText(String text)
,你会在你的keylistener中说processText(inputString);
。
因此,当用户输入某些东西并点击进入时,它会在keyListener中开始执行,keyListener将控制流传递给processText()
方法,该方法会因为该文本而执行任何操作。
答案 1 :(得分:0)
这种方法怎么样,非常简单。
的KeyListener:
...
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"))
............
}