JavaFX에서 연결된 속성이나 상호 의존적 속성을 구현하는 가장 좋은 방법은 무엇입니까?연결된 속성을 구현하는 JavaFX
예를 들어 나는 세 개의 정수 특성, lower
, upper
및 그 range = upper - lower
range
하고 범위를 설정하려고하면 그것은 또한 (lower + range
에) 위 설정에 의해 표현하고 싶은 간격을 가지고있다.
이것은 전통적인 Java Beans (set/get 메소드)에서 간단하지만 JavaFX 속성에는 Observable 개념과 Bindings가 포함되어있어 복잡 해지는 것으로 보입니다.
바인딩을 시도했지만 대상 속성을 설정할 수 없으며 양방향 바인딩도되지만 '같음'만 바인딩 할 수 있습니다.
range
을 구현 한 트랙을 javafx.beans.property.IntegerProperty
으로 시작했지만 리스너를 처리하는 등의 작업이 많은 것처럼 보입니다.
더 간단한 방법이 있나요?
편집 : 이는 자바 빈즈 패턴을 사용하는 것입니다 무엇 :
private int lower = 0;
private int upper = 0;
public int getLower() {
return lower;
}
public void setLower(int lower) {
this.lower = lower;
}
public int getUpper() {
return upper;
}
public void setUpper(int upper) {
this.upper = upper;
}
public int getRange() {
return upper - lower;
}
public void setRange(int range) {
upper = lower + range;
}
이 어떻게 자바 FX의 방법으로이 작업을 수행 할 것입니까? 여기에 내가 일을 생각하지만, ChangeListeners에 추가가 게으른 평가를 사용하는 기회를 파괴 나는 '더미'속성을 정의해야하며 (내가 생각하는)
IntegerProperty lower = new SimpleIntegerProperty(this, "lower", 0);
IntegerProperty upper = new SimpleIntegerProperty(this, "upper", 0);
IntegerProperty range = new SimpleIntegerProperty(this, "range", 0);
public LinkedPropTest() { // Constructor
lower.addListener((ObservableValue<? extends Number> observable, Number oldValue, Number newValue) -> {
range.setValue(upper.getValue() - lower.getValue());
});
upper.addListener((ObservableValue<? extends Number> observable, Number oldValue, Number newValue) -> {
range.setValue(upper.getValue() - lower.getValue());
});
range.addListener((ObservableValue<? extends Number> observable, Number oldValue, Number newValue) -> {
upper.setValue(range.getValue() + lower.getValue());
});
}
을 시도거야. 좋아
그래서이 제대로 얻을 : 당신은 세 가지 속성/설정 가능한 독립형 싶지? – eckig
예, 사용자가 바인딩 할 수있는 세 가지 속성이 있지만 두 개의 독립적 인 속성 만 있습니다. –
당신은 예와 아니오 모두에 대답했습니다 ;-) 어느 것이 독립적이어야합니까? 두 명이라고 했니? – eckig