2013-12-21 48 views
0

我一直在到處搜索如何從鍵盤輸入信息。我可以找到大量的關於如何修改關鍵按鍵上keylistener的資源,我可以找到如何將它添加到擺動文本行以及其他大量關於它的其他信息。但我無法找到如何將其放入文件並使用它。Java:你怎麼實際使用KeyListener?

現在我只想要一個主類,它的主要功能只是一個無限循環,每次按一個鍵打印「Key _已被按下」。我該怎麼做呢?

我做了一個MyKeyListener,它擴展了KeyAdapter,它包含keyPressed下的字符串的system.out.print(我認爲這是可行的)。但是我在主課中放入了什麼來實際使用它?包括它和初始化是不夠的。

這裏是我的關鍵監聽文件:`

import java.awt.event.KeyAdapter; 
import java.awt.event.KeyEvent; 
public class GKeyListener extends KeyAdapter { 

public void keyPressed(KeyEvent e){ 
    System.out.println("Key Pressed: " + e.getKeyChar()); 
} 
public void keyReleased(KeyEvent e){ 
    System.out.println("Key Released: " + e.getKeyChar()); 
} 
public void keyTyped(KeyEvent e){ 
    System.out.println("Key Typed: " + e.getKeyChar()); 
} 

這裏是工作的一個主文件IM和不知道從哪裏去: 進口java.awt.KeyEventDispatcher; import java.awt.KeyboardFocusManager; import java.awt.event.KeyEvent;

public class tempMain { 
public static void main(String[] args){ 
    while(true){ 
     GKeyListener listen =new GKeyListener(); 
     //addKeyListener(listen); 
    } 
} 
+0

我在我的臨時文件中添加了我正在嘗試解決的問題。我在這裏查看了教程:http://docs.oracle.com/javase/tutorial/uiswing/events/keylistener.html 但是沒有添加文本字段我不知道如何實際調用偵聽器來實際存在,正在工作 – user12092

回答

0

KeyListener是Java AWT GUI框架的一個類。它是AWT事件處理系統的一部分,例如用於捕獲文本輸入組件的關鍵事件(如TextArea,TextField等)。

沒有組件,使用KeyListener沒什麼意義。

如果您想做一些實驗,您可以使用KeyboardFocusManager捕獲沒有文本輸入組件的鍵輸入。本示例同時顯示了將KeyListener綁定到文本組件並使用全局KeyboardFocusManager

public class KeyExample extends JFrame { 
    public KeyExample() { 
     JTextField jTextField = new JTextField(20); 
     jTextField.addKeyListener(new KeyAdapter() { 
      @Override 
      public void keyTyped(KeyEvent e) { 
       System.out.println("KeyListener: " + e.getKeyChar()); 
      } 
     }); 
     add(jTextField); 
     pack(); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
    } 

    public static void main(String[] args) { 
     KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(new KeyEventDispatcher() { 
      @Override 
      public boolean dispatchKeyEvent(KeyEvent e) { 
       System.out.println("KeyEventDispatcher: " + e.getKeyChar()); 
       return false; 
      } 
     }); 
     new KeyExample().setVisible(true); 
    } 
} 

您應該只在極少數情況下使用KeyboardFocusManager。通常情況下,使用KeyListener來處理事件應該足夠了。

0

這段代碼的含義:

public class tempMain { 
public static void main(String[] args){ 
    while(true){ 
     GKeyListener listen =new GKeyListener(); 
     //addKeyListener(listen); 
    } 
} 

反覆營造的KeyListener,數千次!它對使用的KeyListener沒有任何作用,並且當只有一個KeyListener是必要的時候再次創建數千個KeyListener。相反,您應該考慮以下內容:

  • 首先創建一個GUI。沒有Swing或AWT GUI,KeyListeners不起作用並且沒有意義。傾向於使用Swing over AWT。
  • 將KeyListener添加到GUI中具有焦點的組件的單個
  • 認真考慮使用Key Bindings來代替KeyListener,以獲得更大的靈活性和代碼可重用性。

編輯
幽州的評論,

但不添加一個文本字段我不知道如何實際調用聽者實際存在和合作

  • 爲了記錄,您不應該使用KeyListen呃與JTextComponent(如JTextField)相關聯,因爲有更好更安全的方法來捕獲這些組件中的輸入。
  • 聽起來好像你想要一個通用的OS範圍的關鍵偵聽器。如果是這樣的話,那麼你就會吼出錯誤的樹,因爲Java不會輕易支持這一點。
  • 對於這種功能,您需要用JNA或JNI綁定到操作系統。
  • 或者使用爲您的應用提供此功能的第三方庫
  • 或綁定到實用程序(如AutoIt)以爲您的應用提供此功能。