首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与ActionEvent的JavaFX绑定

与ActionEvent的JavaFX绑定
EN

Stack Overflow用户
提问于 2018-06-10 22:37:05
回答 1查看 175关注 0票数 0

我正在尝试创建一个小型的JavaFX应用程序。

我想要做的是:我的应用程序有一个TextField,用户可以让它插入一个url。然后单击一个按钮来加载页面。我想做的是在TextField为空或页面加载时禁用此按钮。页面加载完成后,该按钮将再次启用。

我使用绑定将TextField与按钮绑定在一起,因此当TextField为空时,按钮将被禁用,使用以下代码:

代码语言:javascript
复制
BooleanBinding booleanBind = new BooleanBinding() {
            {
                super.bind(url.textProperty());
            }
        @Override
        protected boolean computeValue() {
            return url.getText().isEmpty();
        }
    };
    loadButton.disableProperty().bind(booleanBind);

现在我还想在页面加载时禁用该按钮。为了加载页面,我使用了下面的代码:

代码语言:javascript
复制
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.错误。

如何在页面加载时使用绑定来禁用按钮?

EN

回答 1

Stack Overflow用户

发布于 2018-06-11 06:37:28

WebEngine有一个方法来获取用于执行后台加载的WorkerWebEngine.getLoadWorker()Worker具有running属性。使用此属性,并通过或绑定将其与TextFieldtext属性是否为空结合起来。

代码语言:javascript
复制
BooleanBinding empty = textField.textProperty().isEmpty();
button.disableProperty().bind(empty.or(webEngine.getLoadWorker().runningProperty());

此外,如上所述,不需要创建自己的BooleanBinding来保存TextField的空状态。text属性是从StringExpression扩展而来的StringPropertyStringExpression类有isEmpty()方法,它为您返回一个BooleanBinding

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50784785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档