java - 通过使用另一个 Controller 来操作 JavaFX Controller

标签 java javafx

我在我的 JavaFX 应用程序的一部分中遇到了这种情况。有 2 个 SliderRadioButtonToggleGroup,它们在被操作时返回 acquisitionTimeValueLabel 中的值由用户。我的问题是:有没有办法在采集时间也有一个 Slider ?所以我可以直接设置它,其他 Controller 会受到它的影响。更清楚地说,我希望可以选择也具有反函数。

另外我对问题的标题不是很确定,所以非常欢迎编辑。

我的代码示例:

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 个不同来源的标签值,第三个是直接编辑标签值,这将影响前两个:
所以你可以制作第三个 slider 并监听它的值的变化,如下所示:

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
    }
});

在此方法中,您可以执行您的逻辑来编辑其他 slider 的值。
希望对你有帮助

关于java - 通过使用另一个 Controller 来操作 JavaFX Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51516237/

相关文章:

java - 缓冲图像填充不起作用

JavaFX setCellValueFactory

java - 将 Label 的文本属性(在 FXML 文件中)绑定(bind)到 IntegerProperty(在 Controller 中)

java - 如何通过按下带有 setOnAction 的按钮来更改值?

java - String.intern() 如何工作以及它如何影响字符串池?

java - 将句子中的所有单词都放到一个数组中,忽略空格?

java - 如果未在业务接口(interface)中声明,如何调用无状态 bean 方法

java - 一个 while 循环,其中包含一个 if 语句和一个 for 循环

java - 使用 JavaFX 播放 Youtube 视频

JavaFx ComboBox 自定义下拉菜单