2016-08-27 12 views
1

У меня есть класс с геттерами/сеттерами для взаимодействия с базовым драйвером устройства. Геттер считывает данные с устройства, а сеттер записывает данные на устройство. Я бы добавил свойство FX к этому классу, чтобы привязываться к элементам управления графическим интерфейсом. Я создаю свойство, используя JavaBeanPropertyBuilder, и это работает. Но значение свойства может быть изменено не только на стороне GUI, но и на стороне устройства, поэтому мне нужно обновить свойства таймером, и я хочу, чтобы сила недействила свойства, чтобы обновить все привязки. Является ли это возможным?Принудительное отклонение свойств JavaFX

UPD с примером кода:

class MyDevice { 
    public double getSpeed() { 
     return (double)driver.getParameter("speed"); 
    } 
    public void setSpeed(double value) { 
     driver.setParameter("speed", value); 
    } 
    private DoubleProperty speed = new JavaBeanDoublePropertyBuilder().bean(this).name("speed").build(); 
    public DoubleProperty speedProperty() { 
     return speed; 
    } 
} 

Теперь я связываю MyDevice::speedProperty для управления GUI и если значение было изменено на стороне водителя, я хочу что-то вроде speedProperty.invalidate(), чтобы заставить обрабатывать все зарегистрированные слушатель и обновление привязки. (Я знаю об изменениях на стороне драйвера путем запроса таймера состояния устройства, например, но не всех доступных параметров.)

ответ

1

Метод fireValueChangedEvent может использоваться для уведомления JavaBeanDoubleProperty о том, что базовые данные были изменены.

private JavaBeanDoubleProperty speed = new JavaBeanDoublePropertyBuilder().bean(this).name("speed").build(); 
speed.fireValueChangedEvent(); 
0

Короткий ответ: да. Однако без вас быть более конкретным в вашем случае использования, есть только несколько общих советов:

  • Вы можете добавить InvalidationListener `в вашей собственности, которая называется всякий раз, когда связанное свойство изменяет это значение
  • Вы могли бы рассмотреть для привязки свойства bidirectional, так что изменения с любого направления отражаются на другой стороне.
  • Однако двунаправленное связывание не может быть предпочтительным, и в этом случае вы можете зарегистрировать ChangeListener на Property.