我目前正在开发一个即时消息程序,并已创建一个文本供用户在 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();
}
}
最佳答案
您可以将 onKeyPressed
事件监听器添加到 fxml
中的 TextField
。
...
<TextField fx:id="chatText" layoutX="199.0" layoutY="174.0" onKeyPressed="#keyListener" />
...
在 Controller 中,声明一个方法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
}
...
关于java - 焦点 JavaFX FXML 上的 KeyEvent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30167726/