3

Scannerクラスを使用してコンソールからの入力を受け入れるプログラムをJAVA言語で作成しました....

ユーザーがEscボタンを押したときにループ(while)が存在するように、この機能をコードに追加したいと思います。これまでのところ、キーボードクラスが役立つと思っていましたが、スキャナーのようでした...イベントを使用しようとしましたが、それらを正しく使用する方法がわかりません....

ソースコード:

    package switchCase_v1;

     import cs1.Keyboard;
     import java.util.EventObject;
     import java.awt.AWTEvent;
     import java.awt.event.KeyEvent;
     import java.awt.event.ComponentEvent;
     import java.awt.event.InputEvent;
     import java.util.*;

      public class SwithCase {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner input = new Scanner(System.in);
        System.out.println("enter the name or number of month: ");
        int monthNumber = input.nextInt();

        while (true) {
            KeyEvent button;
            if (button.getKeyCode() == 27)
                break;
            else if (monthNumber == '\n') {
                System.out.println("enter a number");
                monthNumber = input.nextInt();
            } else {
                switch (monthNumber) {
                case 1:
                case 2:
                case 3:
                case 4:
                case 5:
                case 6:
                    System.out.println("it has 31 days");
                    monthNumber = input.nextInt();
                    break;
                case 7:
                case 8:
                case 9:
                case 10:
                case 11:
                case 12:
                    System.out.println("it has 30 days");
                    monthNumber = input.nextInt();
                    break;
                default:
                    System.out.println("it is not a valid number");
                    monthNumber = input.nextInt();
                    break;
                }
            }

        }
    }
  }

「Esc」や「Enter」などのボタンを押すことを考慮したい場合、どのように対処すればよいですか? アスキーコードを使えば応用できると思います。

これは私のコードの新しいバージョンです:

public static void main(String[] args) {
    // TODO Auto-generated method stub

    Scanner input = new Scanner(System.in);
    System.out.print("Check number of days");
    KeyEvent e;
    if (e.getKeyCode() == KeyEvent.VK_ENTER)
    {
    System.out.println("enter the name or number of month: ");
    int monthNumber=input.nextInt();
    }
    else if (Keyboard.getEventKey()==Keyboard.KEY_ESCAPE)
    {
        System.out.println("GoodBye");
    }
    }   

}

しかし、eオブジェクトが初期化されていない可能性があるというエラーがあります...!!!!!どうすればいいですか?!!!!

4

3 に答える 3

7

現在、標準入力からデータを読み取り、標準出力に出力するコマンドライン アプリケーションを作成しています。ボタンの押下がどのように処理されるかは、プログラムを実行している端末に完全に依存し、ほとんどの端末はエスケープが押されたときにアプリケーションの stdin に何も送信しません。

重要なイベントをキャッチしたい場合は、AWT または Swing を使用して GUI アプリケーションを作成する必要があります。実行中にプログラムを終了したいだけなら、Ctrl+C を押してみてください (これはほとんどの端末で機能します)。

于 2012-05-25T13:32:09.403 に答える
3

次のページをご覧ください。 http://docs.oracle.com/javase/tutorial/uiswing/events/keylistener.html

特に、この部分:

int getKeyCode()

このイベントに関連付けられたキー コードを取得します。キーコードは、ユーザーが押したり離したりしたキーボード上の特定のキーを識別します。KeyEvent クラスは、一般的に見られるキーの多くのキー コード定数を定義します。たとえば、VK_A は A というラベルの付いたキーを指定し、VK_ESCAPE は Escape キーを指定します。

于 2012-05-24T19:41:58.353 に答える