Привязка свойства Label к свойству Image с использованием параллелизма javafx Задача <Void> - PullRequest
0 голосов
/ 10 марта 2019

Я пытаюсь обновлять свой JavaFX GUI через каждую 1 секунду, используя задачу Task Concuurency. У меня есть иконки 1.png, 2.png, 3.png и так далее. Я использую цикл while с шагом i++. Я хочу отображать эти значки каждые 1 секунду. Я не знаю, как обновить изображение. Я использую label.setGraphic() метод. Я не знаю, как использовать здесь свойство bind. Я могу быть совершенно не прав. Пожалуйста, помогите мне.

@Override
public void start() {
  ...
  image = new Image(getClass().getResourceAsStream("images/1.png"));
  imv=new ImageView(image);
  label1 = new Label();
  label1.setGraphic(imv);
  monitor(); //A SEPARATE METHOD CONTAINING TASK CODE
  ...
  new Thread(task1).start();
}

...
public void monitor() {
  task1=new Task<Void>() {
    @Override
    protected Void call() {
      int i=1;
      while(true) {
        try {
          Thread.sleep(1000);
          updateMessage(""+i+".png");
          System.out.println("i: "+i);
        }
        catch(Exception e) {
        }
        i++;
        }
     }
  };
  label1.textProperty().bind(task1.messageProperty());
  ...
}

1 Ответ

0 голосов
/ 10 марта 2019

Ошибка в том, что вы не можете привязать ReadOnlyStringProperty к ObjectProperty<Image>.

Вы должны добавить прослушиватель изменений ( docs ) в свойство сообщения задачи ( docs ) и создать изображение, которое затем примените к представлению изображения:

public void monitor() {
    task1 = new Task<Void>() {
        @Override
        protected Void call() {
            System.out.println("run called");
            int i = 1;
            while (true) {
                try {
                    Thread.sleep(1000);
                    updateMessage(i + ".png");
                    System.out.println("i: " + i);
                } catch (Exception e) {

                }
                i++;
            }
        }
    };
    task1.messageProperty().addListener((observable, oldValue, newValue) -> {
        System.out.println(newValue);
        Image image = new Image(getClass().getResourceAsStream("images/" + newValue));
        imv.setImage(image);
    });
}

EDIT:

ChangeListener представлено этим лямбда-выражением в данном фрагменте. Пожалуйста, прочитайте предоставленные документы для получения дополнительной информации.

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