1
Spinner의 값을 정수 속성에 바인딩하려고합니다. This answer은 새로운 IntegerProperty를 만들고 싶지 않고 대신 스피너의 값을 기존의 IntegerProperty에 바인딩하기 때문에 만족스럽지 않습니다.바인더 스피너 <Integer> to 기존 IntegerProperty
그 대답에 표시된대로 새로운 IntegerProperty를 만든 다음 기존의 IntegerProperty에 바인딩하려고했습니다. 그러나,이 예제 코드는 작동하지 않습니다
import javafx.application.Application;
import javafx.beans.property.*;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class Main extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
StackPane pane = new StackPane();
IntegerProperty controlled = new SimpleIntegerProperty(); // I don't want to change this.
final Spinner<Integer> spinner = new Spinner<>(0, 10, 5, 1);
ObjectProperty<Integer> bridgeObject = new SimpleObjectProperty<>();
IntegerProperty bridgeInteger = IntegerProperty.integerProperty(bridgeObject); // "Returns a IntegerProperty that wraps a Property and is bidirectionally bound to it."
SpinnerValueFactory<Integer> valueFactory = spinner.getValueFactory(); // not null
ObjectProperty<Integer> integerObjectProperty = valueFactory.valueProperty(); // not null
integerObjectProperty.bindBidirectional(bridgeObject); // Throws NullPointerException, but not while debugging?!
bridgeInteger.bindBidirectional(controlled);
pane.getChildren().add(spinner);
primaryStage.setScene(new Scene(pane, 300, 275));
primaryStage.show();
}
}
질문 :
- 이 중간 "다리"속성을 만드는 것보다 기존
IntegerProperty
에 바인딩 할 수있는 더 나은 방법이 있나요? - 그렇지 않은 경우, 예제 코드가 NullPointerException을 throw하는 이유는 무엇입니까?
integerObjectProperty
이 null이 아니라고 주장하면서 확인했습니다. 이상하게도 코드가 줄 단위로 디버깅되면 예외가 발생하지 않습니다 (이유는 무엇입니까?). 다른 질문의 저자는 그가 이와 같은 작업을 성공적으로 수행했지만 다른 사용자의 코드 게시 요청에 응답하지 않았다고 주장했습니다.