java - 通过使用另一个控制器来操作 JavaFX 控制器
问题描述
我在我的 JavaFX 应用程序的一部分中遇到了这种情况。当用户操作它们时,有 2 Slider
s 和 a ToggleGroup
of RadioButton
s 会返回一个值。acquisitionTimeValueLabel
我的问题是:有没有办法让Slider
采集时间也有一个?所以我可以直接设置它,其他控制器会受到它的影响。更清楚地说,我希望可以选择具有反函数。
另外我不太确定问题的标题,因此非常欢迎编辑。
我的代码示例:
public class dasd {
private RadioButton first;
private RadioButton second;
private RadioButton third;
private ToggleGroup group;
private Slider ramWidthSlider = new Slider(0, 255, 0);
private Label ramWidthValueLabel = new Label("256 bytes (64 words)");
private Slider sampleRateSlider = new Slider (0, 15, 0);
private Label sampleRateValueLabel = new Label("13560 KHz");
private Label acquisitionTimeValueLabel = new Label ("some value");
private static final String[] STRINGS_FREQ = new String[16];
private static final String[] STRINGS_MEM = new String[256];
@FXML
private void initialize(){
first.setToggleGroup(group);
second.setToggleGroup(group);
third.setToggleGroup(group);
group.selectedToggleProperty().addListener((ov, old_toggle, new_toggle) -> {
if (group.getSelectedToggle() != null) {
}
});
fillTheClock();
fillTheRam();
ramWidthValueLabel.textProperty().bind(
Bindings.createStringBinding(
() -> getDisplayMemory((int) Math.round(ramWidthSlider.getValue())),
ramWidthSlider.valueProperty()
)
);
sampleRateValueLabel.textProperty().bind(
Bindings.createStringBinding(
() -> getDisplayFrequency((int) Math.round(sampleRateSlider.getValue())),
sampleRateSlider.valueProperty()
)
);
acquisitionTimeValueLabel.textProperty().bind(
Bindings.createStringBinding(
() -> String.format("%.3f", (pow(2, (group.getToggles().indexOf(group.getSelectedToggle()))))
* (pow(2, sampleRateSlider.getValue()) / 13.56) * 64 * (ramWidthSlider.getValue() + 1) ) + " µs of acquisition",
group.selectedToggleProperty(), ramWidthSlider.valueProperty(), sampleRateSlider.valueProperty()
)
);
}
/**\
* Methods for displaying the values of the Sample Rate Slider
*
*/
private static void fillTheClock() {
double frequency = 13560;
for (int i = 0; i <= 15; i++) {
STRINGS_FREQ[i] = Double.toString(frequency) + " KHz";
frequency = frequency / 2;
}
}
private static String getDisplayFrequency(int value) {
return STRINGS_FREQ[value];
}
/**
* Methods for displaying the values of Memory Width Slider
*
*/
private static void fillTheRam() {
int memory = 256 ;
for (int i = 0; i <= 255; i++) {
STRINGS_MEM[i] = Integer.toString(memory) + " bytes (" + Integer.toString(memory/4) + " words)";
memory = memory + 256;
}
}
private static String getDisplayMemory(int value){
return STRINGS_MEM[value];
}
}
解决方案
如果我理解您的问题,您是否要编辑来自 3 个不同来源的标签值,第三个是直接编辑标签值,这将影响前两个:
因此您可以制作第三个滑块并listen
更改其值,如下所示:
slider.valueProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
//write your logic here where newValue if the current value of the slider
}
});
在这种方法中,您可以执行您的逻辑来编辑其他滑块的值。
我希望它有帮助
推荐阅读
- flutter - Flutter SharedPreferences 重置数据
- javascript - 如何在javascript中检测精灵对象相互接触?
- python - 如何用uwsgi连接django和nginx?
- apache-kafka-streams - Kafka Stream State Store 分布
- r - 将相关表排列成行
- html - 在文本悬停时显示图像
- ruby-on-rails - Rails 找到所有条件
- go - 如何解决 go-diameter 连接错误:使用关闭的网络连接?
- swift - 灯箱控制器尝试呈现
- android - Android:为什么日期数据不正确?从数据库中检索数据时