使用单个侦听器检查多个元素

时间:2018-11-26 13:30:55

标签: java list button javafx observable

我正在尝试创建一个电子邮件客户端。这是我打开程序时的输出: enter image description here

如您所见,唯一启用的按钮是全部答复。这是因为我无法转发或回复未选择的电子邮件,但可以回复列表中的所有电子邮件。然后,如果我删除所有电子邮件,则输出为: enter image description here

所有按钮均被禁用(这是正确的)。现在,如果我通过按 Cambia帐户更改帐户,则会生成一个新的电子邮件列表,但是全部答复按钮将不会启用。我猜这是因为侦听器仅检查当前邮件的状态,而不检查是否存在它们的列表。我该如何解决? enter image description here

这是管理禁用按钮的部分的代码:

public void initModel(DataModel model) {
    if (this.model != null) {
        throw new IllegalStateException("Model can only be initialized once");
    }
    this.model = model;
    model.currentEmailProperty().addListener((obs, oldEmail, newEmail) -> {
        if (oldEmail != null) {
            reply.setDisable(false);
            forward.setDisable(false);
            replyall.setDisable(true);
        }
        if (newEmail == null) {
            reply.setDisable(true);
            forward.setDisable(true);
            replyall.setDisable(true);
        } else {
            reply.setDisable(false);
            forward.setDisable(false);
            replyall.setDisable(false);
        }
    });
}

1 个答案:

答案 0 :(得分:0)

如果您的replyall按钮的禁用状态取决于列表是否包含项目,那么为什么要在currentEmailProperty侦听器中对其进行更改?您应该听列表的更改并在那里进行更新。