Не удается создать экземпляр ObservableList с помощью экстрактора - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть пользовательский объект FermentableInRecipe, который заполняет TableView. Чтобы реагировать на изменения элементов в списке, а также на сам список, я решил использовать экстрактор. Вот мое заявление и экземпляр моего ObservableList:

private ObservableList<FermentableInRecipe> fermentablesInRecipe = 
FXCollections.observableArrayList(item -> new Observable[]{item.WeightProperty()});

Вот соответствующие сегменты моего пользовательского класса:

public class FermentableInRecipe {

    private DoubleProperty weight;

    ...

    public Double getWeight() {
         return this.weight.getValue();
    }

    public void setWeight(Double value) {
        this.weight.setValue(value);
    }

    public DoubleProperty WeightProperty() {
        if (weight == null) {
            weight = new SimpleDoubleProperty(0.0);
        }
        return weight;
    }

    ...
}

В приведенных ниже ссылках этот подход работал. Но Netbeans говорит мне, что "DoubleProperty нельзя преобразовать в Observable" . Я понимаю, почему это так, но я не могу понять, почему это работает в ссылках ниже, а не для меня, и как я должен создать экстрактор и связать его с функцией weightProperty(), если этот подход не работает.

Ссылки:

Ящик выбора JavaFX 2.0. Как обновить choiceBox, представляющий список объектов, при обновлении объекта?

JavaFX, ObservableList: как запускать InvalidationListener при каждом изменении объекта списка?

Заранее спасибо. Дайте мне знать, если я пропустил какую-либо важную информацию.

1 Ответ

0 голосов
/ 30 апреля 2018

Нет ничего плохого в том, что написано в вашем коде, это прекрасно для меня:

import javafx.application.Application;
import javafx.beans.Observable;
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.stage.Stage;

public class JavaFXApplication1 extends Application {

    class FermentableInRecipe {

        private DoubleProperty weight;

        public Double getWeight() {
            return this.weight.getValue();
        }

        public void setWeight(Double value) {
            this.weight.setValue(value);
        }

        public DoubleProperty WeightProperty() {
            if (weight == null) {
                weight = new SimpleDoubleProperty(0.0);
            }
            return weight;
        }

    }

    private ObservableList<FermentableInRecipe> fermentablesInRecipe = FXCollections.observableArrayList(item -> new Observable[]{item.WeightProperty()});

    @Override
    public void start(Stage primaryStage) throws Exception {
    }
}

Я бы рекомендовал дважды проверить импорт и убедиться, что вы не импортировали java.util.Observable или подобное по ошибке.

...