在按钮上发送文本字段输入单击或回车键



我正在尝试进行聊天,以便当我按回车键或按"发送"按钮时,文本字段的输入将进入列表视图。它确实是它的工作,尽管代码真的很混乱。

我的控制器代码如下:

public void initialize() {
        sendButton.setDisable(true);
}
public void isChatEmpty() {
    boolean isChatEmpty = textInput.getText().isEmpty();
    sendButton.setDisable(isChatEmpty);
}
public void sendMessageOnClick(){
    sendButton.setOnAction((e) -> {
        String message = textInput.getText();
        chatHistory.getItems().add("Sorin: " + message + "n");
        textInput.setText(null);
        sendButton.setDisable(true);
    });
}
public void sendMessageOnEnter(){
    textInput.setOnKeyPressed(e -> {
        if (e.getCode() == KeyCode.ENTER) {
            String message = textInput.getText();
            chatHistory.getItems().add("Sorin: " + message + "n");
            textInput.setText(null);
            sendButton.setDisable(true);
            System.out.print("test");
        }
    });
}

我知道它可以工作,因为我可以在 GUI 中看到它,但我不知何故在我的"isChatEmpty"上得到了一个 Null指针,公平地说,我不知道为什么。

Caused by: java.lang.NullPointerException
    at sample.Controller.isChatEmpty(Controller.java:29)

另外,有没有办法组合两个 Lambda 函数?

提前谢谢你!

在输入并单击的情况下,有一种简单的方法可以解决这个问题:对两者都使用 onAction 方法。对于TextField,当您按回车键时会触发此操作。此外,这些处理程序应从 fxml 分配。还可以使用绑定来禁用按钮:

<TextField fx:id="textInput" onAction="#send"/>
<Button fx:id="sendButton" text="Send" onAction="#send"/>
@FXML
private void initialize() {
    sendButton.disableProperty().bind(textInput.textProperty().isEmpty());
}
@FXML
private void send() {
    String message = textInput.getText();
    if (message != null && !message.isEmpty()) {
        chatHistory.getItems().add("Sorin: " + message);
        textInput.clear();
    }
}

isChatEmpty()方法中,textInput.getText()的结果是null,因为您用 textInput.setText(null); 设置它。这null会导致 NPE(请参阅文档以了解String.isEmpty()(。

要解决此问题,您可以删除isChatEmpty()方法并设置单向绑定:

public void initialize() {
    sendButton.disableProperty().bind(textInput.textProperty().isEmpty());
}

请注意,这里的.isEmpty()不是对String.isEmpty()的呼吁,而是对 StringExpression.isEmpty()生成类型 BooleanBinding 绑定的内容。

相关内容

  • 没有找到相关文章

最新更新