2016-08-27 4 views
1

기본 디바이스 드라이버와 상호 작용할 수있는 getters/setter 클래스가 있습니다. getter는 장치에서 데이터를 읽고 setter는 데이터를 장치에 씁니다. 나는이 클래스에 FX 프로퍼티를 추가하여 GUI 컨트롤에 바인딩했다. 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; 
    } 
} 

, 나는 GUI 컨트롤에 MyDevice::speedProperty을 바인딩하고 값이 드라이버 측에서 변경된 경우 나 등록 된 모든 리스너 및 업데이트를 처리 강제로 speedProperty.invalidate() 뭔가를 원하는 바인딩. (예를 들어 타이머가 장치 상태를 쿼리하여 드라이버 측의 변경 사항을 알 수 있지만 사용할 수있는 모든 매개 변수가 아닙니다.)

답변

1

fireValueChangedEvent 메서드는 기본 데이터가 변경되었음을 JavaBeanDoubleProperty에 알리기 위해 사용할 수 있습니다.

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

짧은 대답은 '예'입니다. 바운드 속성은 그것의 가치

  • 당신은 고려해 볼 수 있습니다 변경할 때마다

    • 당신이라고 당신의 재산에 InvalidationListener을`추가 할 수 있습니다 그러나 당신이 당신의 사용 사례에 대한 특정하지 않고, 그냥 일반적인 조언이 bidirectional 속성을 바인딩하여 양쪽 방향의 변경 사항이 다른쪽에 반영되도록합니다.
    • 그러나 양방향 바인딩이 바람직하지 않을 수 있으며이 경우 ChangeListenerProperty에 등록 할 수 있습니다.