Связывание JavaFX с ActionEvent - PullRequest
0 голосов
/ 10 июня 2018

Я пытаюсь создать небольшое приложение 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. error.

Как я могу использовать привязки, чтобы также отключить кнопку при загрузке страницы?

1 Ответ

0 голосов
/ 11 июня 2018

A WebEngine имеет метод для получения Worker, используемого для выполнения фоновой загрузки: WebEngine.getLoadWorker().A Worker обладает свойством running.Используйте это свойство и объедините его с тем, является ли свойство TextField text пустым через или привязкой.

BooleanBinding empty = textField.textProperty().isEmpty();
button.disableProperty().bind(empty.or(webEngine.getLoadWorker().runningProperty());

Также, как показано выше, нет необходимости создавать свой собственныйBooleanBinding для хранения пустого состояния TextField.Свойство text является StringProperty, которое простирается от StringExpression.Класс StringExpression имеет метод isEmpty(), который возвращает для вас BooleanBinding.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...