如何将JavaFX Slider绑定到显示列表中值的标签?

时间:2018-07-09 08:49:55

标签: java javafx

我已使用绑定到Slider的{​​{1}}构建了JavaFX。目前,我仅设法使Label处理离散值(从0到15)并在Slider上显示这些值。我想显示另一种值,这16个离散值中的每一个。也许是从清单或其他任何东西。 我该如何实现?

我的实现

Label

我的控件类的private Slider sampleRateSlider = new Slider (0, 15, 0); private Label sampleRateLabel = new Label("Sample Rate"); private Label sampleRateValueLabel = new Label(Double.toString(sampleRateSlider.getValue())); acquisitionModeTab.setConstraints(sampleRateLabel,0, 1); acquisitionModeTab.setConstraints(sampleRateSlider, 1, 1); sampleRateSlider.setShowTickLabels(true); sampleRateSlider.setShowTickMarks(true); sampleRateSlider.setMajorTickUnit(5); sampleRateSlider.setMinorTickCount(5); sampleRateSlider.setSnapToTicks(true); acquisitionModeTab.setConstraints(sampleRateValueLabel, 2, 1); sampleRateValueLabel.setAlignment(Pos.CENTER_RIGHT); 方法内的监听器:

initialize()

一切正常,但我想实现我上面的要求,我不知道如何做到。

1 个答案:

答案 0 :(得分:1)

private Label sampleRateValueLabel = new Label(getDisplayString(0));
sampleRateSlider.valueProperty().addListener((ov, old_val, new_val) -> {
    int value = (int) Math.round(new_val.doubleValue());
    sampleRateSlider.setValue(value);
    System.out.println(value);
    sampleRateValueLabel.setText(getDisplayString(value));
});

getDisplayString方法应使用合适的数据结构来提出String以返回。 List<String>确实是一个不错的选择,但是String[]Map<Integer, String>也可以工作:

private static final String[] STRINGS = new String[] {
         "s", "t", "a", "c", "k", "o", "v", "e",  "r", "f", "l", "o", "w", "c", "o", "m"
    };

private static String getDisplayString(int value) {
    return STRINGS[value];
}