2015-05-11 260 views
0

我目前正在研究一個即時消息程序,並且已經爲用戶在FXML中輸入消息創建了一個文本。KeyEvent焦點JavaFX FXML

如何在文本字段具有焦點時按Enter鍵時添加KeyEvent

更新 - 嘗試過,但不起作用

<TextArea fx:id="area_chatInput" 
     editable="true" 
     prefHeight="60" 
     prefWidth="300" 
     wrapText="true" 
     promptText="Enter Message /> 


@FXML 
private void keyListener(KeyEvent event){ 
    if(event.getCode() == KeyCode.ENTER){ 
     System.out.println("enter pressed"); 
     sendMsg(); 
     event.consume(); 
    } 
} 
+1

添加KeyEvent到哪個代碼?請分享您的代碼的簡潔版本。 –

+0

請準確地在你的問題 - 你有一個_TextArea_在你的代碼和正在談論一個_TextField_ – kleopatra

回答

2

您可以在fxml添加onKeyPressed事件偵聽器,您TextField

... 
<TextField fx:id="chatText" layoutX="199.0" layoutY="174.0" onKeyPressed="#keyListener" /> 
... 

在控制器中聲明的方法keyListener

public void keyListener(KeyEvent event){ 
    if(event.getCode() == KeyCode.ENTER) { 
      // Do stuff 
      ((TextField)event.getSource()).clear(); // clear textfield 
      System.out.println("Enter Pressed"); // print a message 
    } 
} 

更新 - 根據意見

爲了避免光標步下一行,你需要消耗事件,然後離開該方法。

... 
if (event.getCode() == KeyCode.ENTER) { 
    ... 
    event.consume(); // Consume Event 
} 
... 
+0

謝謝,但我這樣做在文本區域中的ENTER會自動添加換行符。那麼如何讓keyListener方法覆蓋 –

+0

@JoshBeaver請檢查更新。 – ItachiUchiha

+0

它仍然只是添加換行符,我發佈了我的代碼以獲得清晰度 –