2016-10-10 52 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); 

}