gpt4 book ai didi

java - 如何保持 JavaFX Spinner 值的比率

转载 作者:行者123 更新时间:2023-11-30 06:42:10 28 4
gpt4 key购买 nike

我的 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");

When this lock toggle button is selected I want to maintain the ratio in values of hSelector and 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));
});
}
});

但这并没有奏效。 The problem is that when lock is selected and I change the value of one spinner and then I just focus(by clicking in text field of spinner) them both one by one, their value changes automatically even when I不要编辑值。

现在,我的问题是,保持这些微调器值比率的正确方法是什么?我的方法有什么问题?以及如何在取消选择 lock 后删除保持比率的行为。

最佳答案

不要在每次切换按钮更改时都添加新的监听器。 “添加监听器”意味着该方法从字面上向现有监听器集添加一个监听器,因此在编写代码时,如果用户选择切换按钮十次,则每个微调器上将有十个监听器。

正确的方法是为每个微调器添加一个监听器。如果未选择切换按钮,则每个监听器都不应执行任何操作。您需要将微调器值的比率保存在私有(private)字段中,以供听众使用。

private double ratio = 1;

// ...

lock.selectedProperty().addListener((observable, oldValue, newValue) -> {
if (newValue) {
hSelector.commitValue();
wSelector.commitValue();
ratio = (double) hSelector.getValue() / wSelector.getValue();
}
});

hSelector.getValueFactory().valueProperty().addListener((ob, ov, nv) -> {
if (lock.isSelected()) {
wSelector.getValueFactory().setValue((int) (nv / ratio));
}
});
wSelector.getValueFactory().valueProperty().addListener((ob, ov, nv) -> {
if (lock.isSelected()) {
hSelector.getValueFactory().setValue((int) (nv * ratio));
}
});

关于java - 如何保持 JavaFX Spinner 值的比率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53959579/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com