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

时间:2017-04-03 16:00:43

标签: java javafx dynamic slider progress-bar

我已经接受了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}}

1 个答案:

答案 0 :(得分:2)

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

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