2017-08-11 57 views
2

我曾經使用下面的掃描儀類來偵聽用戶通過cmd提示符輸入,但我試圖讓Java應用程序通過改用keyTyped方法來偵聽文本。如何在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); 
    } 
} 

我不知道該怎麼做,這將讓它偵聽按鍵和字母組合成一個字的方法。 (這是一個遊戲得到一個人的名字的方式)

@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

當按下一個文本密鑰可以轉化爲有效的Unicode字符它生成事件的keyTyped此更詳細的解釋和KeyEvent聽衆解釋。我們可以抓住它。上,下等鍵可以通過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"); 
     } 
    } 
} 

這裏是一個Hello World來測試它:

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

如果你需要一個普通的listiners這樣你就可以在任何Java教程中找到它

如果你需要一個定製的監聽器,你可以在這裏看到: Create a custom event in Java

其對定製listuners

一個GOID例子
+0

謝謝你的建議。 – Thereisnospoon

1

您需要擴展KeyAdapter類的子類,這使您可以訪問KeyAdapter類中的keyPressed方法,然後您可以重寫以在程序中執行所需的操作。 KeyEvent e是keyPressed方法的一個參數,它具有getter getKeyCode,該getKeyCode返回特定的int,具體取決於按下的鍵See simple tutorial here。所以,你的代碼只會是這樣的:在建的鍵碼,所以你可以很容易地使用他們的要求,例如用於左鍵int是KeyEvent.VK_LEFT

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

Java有常量。

看看chapter 6 of Eck's excellent free text

+1

謝謝。我感謝您的幫助。 – Thereisnospoon