2016-10-10 101 views
0

我遇到了嘗試在java中使用KeyListener的問題。
我想寫一個程序,直到按下一個鍵才運行,然後輸出該鍵。
這是一個更精細的代碼的墊腳石,所以使用一種方法來打印被按下的鍵只是被用作一種原型。如何在Java中正確使用keyListener

下面是代碼:

import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 

public class keylistener implements KeyListener{ 
    public keylistener(){ 
     addKeyListener(this); 
    } 

    public void keyPressed(KeyEvent e){ 
     int key = e.getKeyCode(); 
     keylistener output = new keylistener(); 
     output.print(key); 
    } 

    public void keyReleased(KeyEvent e){} 
    public void keyTyped(KeyEvent e){} 

    public void print(int key){ 
     System.out.println(key); 
    } 

    public static void main(String[] args){ 
    } 
} 

該程序運行,然後直接之後結束。
我從來沒有使用KeyListener之前,我無法弄清楚如何使程序等待按鍵被按下。

+1

您的主要方法是空的....通常您使用keylistener與GUI,雖然 –

回答

0

我不認爲我曾經將一個KeyListener添加到控制檯應用程序中(可能是因爲KeyListener是AWT包的一部分,主要包含GUI組件),但下面是一個示例GUI應用程序來演示。

你的第一個問題,雖然,是你應該補充new keylistener()到您main方法,雖然已被添加到組件本身,爲了跑出。

public class GuiMain extends JFrame { // A GUI Frame 

    public GuiMain() { 
     // Add the listener 
     this.addKeyListener(new KeyAdapter() { 
      @Override 
      public void keyPressed(KeyEvent e) { 
       super.keyPressed(e); 
       // Print out the code 
       System.out.println(e.getKeyCode()); 
      } 
     }); 

     // Show something 
     add(new JLabel("Hello World!")); 
     pack(); 
    } 

    public static void main(String[] args) { 
     // Run the GUI 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       GuiMain gui = new GuiMain(); 
       gui.setVisible(true); 
      } 
     }); 
    } 

} 
1

KeyListener旨在用於GUI應用程序中,而不是在控制檯應用程序中使用,因爲KeyListener需要運行GUI組件。通常在控制檯應用程序中,您將使用BufferedReader和InputStreamReader。

這是一個控制檯應用程序,演示瞭如何使用BufferedReader和InputStreamReader的while循環讓應用程序等待輸入。雖然還有其他方法可以做到這一點。我做得很清楚,所以你可以把握這個概念。

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 


public class StackStuff { 

public static void main(String[] args) throws IOException { 
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
    boolean runs = true ; 
    System.out.println("Press any key to kill this app..."); 
    while(runs){ 
      input =br.readLine(); 
     if (!(input==null)){ 
      System.out.println(input); 
      runs=false; 
      } 
     } 
    System.out.println("I am dead!!"); 
    System.exit(0); 

}