对不起,如果这看起来有点太容易了,我是JavaFX的新手,这是我用它构建的第一个小应用程序.
我正在尝试制作一个简单的聊天客户端.我正在使用JavaFX场景构建器来创建客户端UI,以及连接到FXML的控制器类.
我怎样才能将文本区域中的当前文本提交给服务器,并在按下回车键时清除文本区域,而不是使用某种"发送"按钮?
编辑:这是不起作用的代码:
//...
public class FXMLDocumentController
{
//...
@FXML private TextArea messageBox;
//...
messageBox.setOnKeyPressed(new EventHandler<KeyEvent>()
{
@Override
public void handle(KeyEvent keyEvent)
{
if(keyEvent.getCode() == KeyCode.ENTER)
{
//sendMessage();
}
}
});
//...
Run Code Online (Sandbox Code Playgroud)
Rya*_*n J 12
这应该可以满足您的需求:
TextArea area;
//... (initialize all your JavaFX objects here...)
// wherever you assign event handlers...
area.setOnKeyPressed(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent keyEvent) {
if (keyEvent.getCode() == KeyCode.ENTER) {
String text = area.getText();
// do your thing...
// clear text
area.setText("");
}
}
});
Run Code Online (Sandbox Code Playgroud)
我想补充的是,如果你愿意的话,提供两个按钮和输入键时,你可以把两个控件的事件处理函数,以一个共同的功能,在某种程度上像这样:
Button sendButton;
TextArea area;
// init...
// set handlers
sendButton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent actionEvent) {
sendFunction();
}
});
area.setOnKeyPressed(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent keyEvent) {
if (keyEvent.getCode() == KeyCode.ENTER) {
sendFunction();
}
}
});
// define send function
public void sendFunction() {
String text = this.area.getText();
// do the send stuff
// clear text (you may or may not want to do this here)
this.area.setText("");
}
Run Code Online (Sandbox Code Playgroud)
无论哪种方式都有效,祝你好运.
小智 9
你也可以使用lambda表达式...我认为它更优雅,更简单
textArea.setOnKeyPressed(event -> {
if(event.getCode() == KeyCode.ENTER){
//type here what you want
}
});
Run Code Online (Sandbox Code Playgroud)