我使用绑定(bind)到 Label
的 JavaFX
构建了这个 Slider
。目前,我只设法让 Slider
处理离散值(从 0 到 15),并将这些值显示在 Label
上。我想显示另一种值,每个值对应 16 个离散值。也许来自列表或其他什么。
我怎样才能实现这个目标?
我的实现
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()
方法内的监听器:
sampleRateSlider.valueProperty().addListener((ov, old_val, new_val) -> {
new_val = Math.round(new_val.doubleValue());
sampleRateSlider.setValue(new_val.doubleValue());
System.out.println(new_val.intValue());
sampleRateValueLabel.setText(new_val.toString());
});
一切正常,但我想实现我上面要求的目标,但我不知道如何实现。
最佳答案
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];
}
关于java - 如何将 JavaFX slider 绑定(bind)到显示列表中的值的标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51241467/