1

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 を使用する場合のように、Enter キーを押すまでキーボードから文字列が渡されるのを待ちます。編集

私のアプリはそのようなコマンドを管理します

while(!finished) {

    finished = processInput() 
}

processInput は、input で指定されたコマンドを管理します。そのため、keyListener から processInput() を呼び出すことができません。私の英語はとても下手です。

ありがとう

4

2 に答える 2

0

イベント ドリブン インターフェイスのアーキテクチャ設計に固執していると思います。

ここでの考え方は、入力などを「待機」しないということです。インターフェイスをセットアップし、KeyListener をアタッチします (addKeyListener()どこかにあるはずです...)。制御フローを放棄し、メイン メソッドを終了させて​​完了です。

ユーザーが何か注目に値することをしたとき、あなたはそれに対処しprocessText(String text)ます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 に答える