我已使用绑定到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()
一切正常,但我想实现我上面的要求,我不知道如何做到。
答案 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];
}