根据滑块的值更改进度条颜色 JavaFX



>我已经从之前的答案中得到了帮助,但我仍然有问题

我想随着滑块值的变化而更改进度条的颜色,但我的进度条始终保持红色,如果超过 2,4,6,则不会更改。我在这里错过了什么?(值:最小值为 0,最大值为 10)

slider是滑块的 ID,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);
}
});
}

CSS 文件 :

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

进度栏的进度范围介于 0 和 1 之间,因此第一个if子句中的条件将始终为 true。(滑块的值范围介于 0 和 10 之间,但您将进度栏的进度设置为该值除以 10,并且更改样式的侦听器将响应该值,而不是滑块的值。

您可能需要针对0.20.4等进行测试,或者使用滑块的值而不是进度条的进度注册第二个侦听器。

最新更新