我正在尝试创建一个小型的JavaFX应用程序。
我想要做的是:我的应用程序有一个TextField,用户可以让它插入一个url。然后单击一个按钮来加载页面。我想做的是在TextField为空或页面加载时禁用此按钮。页面加载完成后,该按钮将再次启用。
我使用绑定将TextField与按钮绑定在一起,因此当TextField为空时,按钮将被禁用,使用以下代码:
BooleanBinding booleanBind = new BooleanBinding() {
{
super.bind(url.textProperty());
}
@Override
protected boolean computeValue() {
return url.getText().isEmpty();
}
};
loadButton.disableProperty().bind(booleanBind);现在我还想在页面加载时禁用该按钮。为了加载页面,我使用了下面的代码:
loadButton.setOnAction(new EventHandler<ActionEvent>() {
@Override public void handle(ActionEvent event) {
//loadButton.setDisable(true);
webEngine.load(url.getText());
}
});你可以看到我在页面加载时禁用按钮的方式(我正在使用ChangeListener在WebEngine完成加载后再次启用它)。但是现在我使用了绑定来绑定它和TextField,我不能像这样手动禁用它,因为我得到了java.lang.RuntimeException: A bound value cannot be set.错误。
如何在页面加载时使用绑定来禁用按钮?
发布于 2018-06-11 06:37:28
WebEngine有一个方法来获取用于执行后台加载的Worker:WebEngine.getLoadWorker()。Worker具有running属性。使用此属性,并通过或绑定将其与TextField的text属性是否为空结合起来。
BooleanBinding empty = textField.textProperty().isEmpty();
button.disableProperty().bind(empty.or(webEngine.getLoadWorker().runningProperty());此外,如上所述,不需要创建自己的BooleanBinding来保存TextField的空状态。text属性是从StringExpression扩展而来的StringProperty。StringExpression类有isEmpty()方法,它为您返回一个BooleanBinding。
https://stackoverflow.com/questions/50784785
复制相似问题