У меня есть два счетчика и кнопка переключения в моем приложении JavaFX, и я также установил их редактируемые
Spinner<Integer> hSelector = new Spinner<>(1,15000,1000,1);
Spinner<Integer> wSelector = new Spinner<>(1,15000,1000,1);
hSelector.setEditable(true);
wSelector.setEditable(true);
ToggleButton lock = new ToggleButton("lock");
Когда выбрана эта кнопка переключения lock
, я хочу сохранить соотношение в значенияхhSelector
и wSelector
.Поэтому я попробовал следующее,
lock.selectedProperty().addListener((observable, oldValue, newValue) -> {
if(newValue){
hSelector.getValueFactory().valueProperty().addListener((ob, ov, nv) -> {
wSelector.getEditor().setText(String.valueOf((nv * wSelector.getValue()) / ov));
});
wSelector.getValueFactory().valueProperty().addListener((ob, ov, nv) -> {
hSelector.getEditor().setText(String.valueOf((nv * hSelector.getValue()) / ov));
});
}
});
Но это не сработало.Проблема в том, что когда выбран lock
и я изменяю значение одного счетчика, а затем просто фокусирую (щелкая в текстовом поле счетчика) их обоих по одному, их значение изменяется автоматически, даже если я не редактируюзначения.
Теперь мои вопросы. Как правильно сохранить соотношение значений этих счетчиков? В чем проблема в моем методе?и как убрать поведение поддержания соотношения после того, как lock
не выбран.