2017-08-11 18 views
2

私は以下のスキャナクラスを使用して、cmdプロンプトでユーザーからの入力を待ちましたが、代わりにkeyTypedメソッドを使用してテキストを待機するJavaアプリケーションを取得しようとしています。JavaでkeyTypedを使用するにはどうすればよいですか?

public static void main(String[] args) throws IOException { 
    new AsteroidsGame(); 
    InputStream inputstream = new InputStream() { 

     @Override 
     public int read() throws IOException { 
      return 0; 
     } 
    }; 
    try { 
     FileOutputStream output = new FileOutputStream("HighScore.txt",true); 
     Scanner input = new Scanner(System.in); 
     PrintStream printStream = new PrintStream(output); 
     printStream.println(input.next() + " " + points); 
     printStream.close(); 
     System.out.println("Success!"); 
    } 
    catch(IOException e){ 
     System.out.println(e); 
    } 
} 

私は、キーストロークを聞き取り、その文字を1つの単語にまとめる方法を知っていません。

@Override 

public void keyTyped(KeyEvent e) {  
if(lives == 0) 
    { 
     e.getKeyCode() = KeyEvent.??? 
    } 
} 

Javaライブラリとインターネットの残りの部分は例やヘルプの面で提供するのは非常に少しを持っているので、任意の提案をいただければ幸いです(これは、ゲームのための人物名を取得する方法があります)。

+1

キーリスナー/イベントは、SwingのGUIではなく、慰めるためのものです。 'KeyEvent'の完全修飾名は何ですか? – user1803551

+0

私はそれを明確にしていません申し訳ありません。これはスイングGUIです。そのゲームは小惑星と呼ばれ、これはプレイを終えた後にユーザー名を取得しようとする私の試みです。名前については、私の問題ですが、誰かが名前を入力することを受け入れるその行に何を入れる必要があるのか​​わかりません。 – Thereisnospoon

+0

これはSwing GUIの場合、どのコンポーネントの使用も表示されていません。あなたは何のゲームオブジェクトを描いていますか?どのコンポーネントが名前を受け取るべきですか?なぜ通常のテキストフィールドを使用しないのですか?キーリスナーに注意して、フォーカスの問題を起こす可能性があります。https://stackoverflow.com/questions/22741215/how-to-use-key-bindings-instead-of-key-listenersを参照してください。 – user1803551

答えて

1

テキストキーは、それがkeyTypedにイベントを生成し、CHARそれが有効なUnicodeに変換することができ押されchapter 6 of Eck's excellent free textでより詳細な本の説明とKeyEventリスナーの説明を参照してください。我々はそれをキャッチすることができます。 Up、downなどのキーはe.getKeyCode()イベントタイプで処理できます。ここで

public class SimpleKeyListener implements KeyListener { 

    StringBuilder sb = new StringBuilder(); 

    @Override 
    public void keyTyped(KeyEvent e) { 
     sb.append(e.getKeyChar()); 
     System.out.println(sb.toString()); 
    } 

    @Override 
    public void keyPressed(KeyEvent e) { 
    } 

    @Override 
    public void keyReleased(KeyEvent e) { 
     if(e.getKeyCode() == KeyEvent.VK_UP) { 
      System.out.println("UP"); 
     } else if(e.getKeyCode() == KeyEvent.VK_DOWN) { 
      System.out.println("DOWN"); 
     } 
    } 
} 

はそれをテストするためのハロー世界です:

public class HelloWorldSwing { 
    private static void createAndShowGUI() { 
     JFrame frame = new JFrame("Frame"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     frame.addKeyListener(new SimpleKeyListener()); 

     JLabel label = new JLabel("Hello Swing"); 
     frame.getContentPane().add(label); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     javax.swing.SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       createAndShowGUI(); 
      } 
     }); 
    } 
} 
+0

私はあなたがしたことを試しています。それがどうやって起こっているか知らせてください。 – Thereisnospoon

+1

それは働いた!ありがとうございました! – Thereisnospoon

+0

@Thereisnospoonあなたは[この手助けがあれば回答を受け入れる]必要があります(https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) –

1

あなたはカスタムリスナーが必要な場合は、あなたがここで見ることができます任意のJavaチュートリアル

でそれを見つけることができますので、あなたは普通のlistinersが必要な場合: Create a custom event in Java

ITSは、カスタムlistunersにgoid例があり

+0

アドバイスありがとうございます。 – Thereisnospoon

1

KeyAdapterクラスを拡張するサブクラスが必要です。これにより、KeyAdapterクラスのkeyPressedメソッドにアクセスできるようになります。このメソッドをオーバーライドして、プログラムで必要な処理を実行できます。 KeyEventeは、押されたキーに応じて特定のintを返すgetter getKeyCodeを持つkeyPressedメソッドのパラメータです。See simple tutorial here。だからあなたのコードは、単にのようになります。

public class KL extends KeyAdapter { 
    int k = 0; 
    @Override 
    public void keyPressed(KeyEvent e) { 
     if (lives == 0) { 
      k = e.getKeyCode(); 
     } 
    } 
} 

Javaは、必要に応じて、簡単に左キーのintはKeyEvent.VK_LEFTある例えば、それらを使用することができますので、キーコードのために組み込まれた定数を持っています。

+1

ありがとうございます。私はあなたの助けに感謝します。 – Thereisnospoon

関連する問題