我已经接受了previous answer的帮助,但我仍有问题
我想将进度条的颜色更改为滑块的值更改,但我的进度条始终保持红色,如果超过2,4则不会更改, 6。我在这里错过了什么? (值:min为0,max为10)
pbar
是滑块的ID,private static final String RED_BAR = "red-bar";
private static final String YELLOW_BAR = "yellow-bar";
private static final String ORANGE_BAR = "orange-bar";
private static final String GREEN_BAR = "green-bar";
private static final String[] barColorStyleClasses = { RED_BAR, ORANGE_BAR, YELLOW_BAR, GREEN_BAR };
public void initialize(URL location, ResourceBundle resources) {
slider.valueProperty().addListener(new ChangeListener<Number>() {
public void changed(ObservableValue<? extends Number> ov, Number old_val, Number new_val) {
pbar.setProgress(new_val.doubleValue()/10);
}
});
pbar.progressProperty().addListener(new ChangeListener<Number>() {
@Override public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
double progress = newValue == null ? 0 : newValue.doubleValue();
if (progress < 2) {
setBarStyleClass(pbar, RED_BAR);
} else if (progress < 4) {
setBarStyleClass(pbar, ORANGE_BAR);
} else if (progress < 6) {
setBarStyleClass(pbar, YELLOW_BAR);
} else {
setBarStyleClass(pbar, GREEN_BAR);
}
}
private void setBarStyleClass(ProgressBar bar, String barStyleClass) {
bar.getStyleClass().removeAll(barColorStyleClasses);
bar.getStyleClass().add(barStyleClass);
}
});
}
是进度条的ID。
一段代码:
.root { -fx-background-color: cornsilk; -fx-padding: 15; }
.pbar { -fx-box-border: goldenrod; }
.green-bar { -fx-accent: green; }
.yellow-bar { -fx-accent: yellow; }
.orange-bar { -fx-accent: orange; }
.red-bar { -fx-accent: red; }
CSS文件:
{{1}}
答案 0 :(得分:2)
进度条的进度介于0和1之间,因此第一个if
子句中的条件将始终为true。 (滑块的值介于0到10之间,但您将进度条的进度设置为该值除以10,并且更改样式的侦听器将响应该值,而不是滑块的值。)
您可能需要针对0.2
,0.4
等进行测试,或使用滑块的值注册第二个监听器,而不是进度条的进度。