gpt4 book ai didi

colors - JavaFX 进度条 : how to change bar color?

转载 作者:行者123 更新时间:2023-12-03 23:22:07 41 4
gpt4 key购买 nike

我正在尝试更改 ProgressBar 中栏的颜色

pBar.setStyle("-fx-accent: green");

但我遇到了一个问题:这似乎不适合我! (或者我只是不明白一些事情)

这是代码:
public class JavaFXApplication36 extends Application {

@Override
public void start(Stage primaryStage) {
AnchorPane root = new AnchorPane();
ProgressBar pbRed = new ProgressBar(0.4);
ProgressBar pbGreen = new ProgressBar(0.6);
pbRed.setLayoutY(10);
pbGreen.setLayoutY(30);

pbRed.setStyle("-fx-accent: red;"); // line (1)
pbGreen.setStyle("-fx-accent: green;"); // line (2)

root.getChildren().addAll(pbRed, pbGreen);
Scene scene = new Scene(root, 150, 50);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
}

我总是得到 2 个红色的进度条!似乎第 (1) 行中的代码更改了 ProgressBar 类的样式,而不是实例。

另一个奇怪的时刻是删除第 (1) 行不会导致 2 个绿色进度条。所以我可以认为第 (2) 行完全没用!!为什么?!这肯定变得奇怪了。

有没有办法为单独的进度条设置单独的颜色?

最佳答案

答案更新以添加一个带有多个进度条的简单非动画示例

您问题中的代码应该显示两个不同颜色的进度条,事实上它不是 JavaFX css 处理系统中的错误。在此处记录针对运行时项目的错误:http://javafx-jira.kenai.com .

作为一种解决方法,不是在进度条上调用 setStyle,而是定义用于为样式表中的进度条着色的强调色,并向进度条添加样式类。然后,您可以在同一个应用程序中创建多个进度条,所有进度条都具有不同的颜色。

正如乌鲁克指出的那样,您可以使用 JavaFX 2.2 caspian.css结合JavaFX 2 css reference guideJavaFX 2 css tutorial确定如何设计事物。

下面是一些示例代码,它根据这些引用中的信息自定义进度条。

示例CSS:

/** progress.css
place in same directory as
ColoredProgressBarStyleSheet.java or SimpleColoredProgressBar.java
ensure build system copies the css file to the build output path */

.root { -fx-background-color: cornsilk; -fx-padding: 15; }

.progress-bar { -fx-box-border: goldenrod; }

.green-bar { -fx-accent: green; }
.yellow-bar { -fx-accent: yellow; }
.orange-bar { -fx-accent: orange; }
.red-bar { -fx-accent: red; }

简单的示例程序:
import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.ProgressBar;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

// shows multiple progress bars drawn in different colors.
public class SimpleColoredProgressBar extends Application {
public static void main(String[] args) { launch(args); }

@Override public void start(Stage stage) {
final VBox layout = new VBox(10);
layout.setAlignment(Pos.CENTER);
layout.getChildren().setAll(
new ColoredProgressBar("red-bar", 0.2),
new ColoredProgressBar("orange-bar", 0.4),
new ColoredProgressBar("yellow-bar", 0.6),
new ColoredProgressBar("green-bar", 0.8)
);
layout.getStylesheets().add(getClass().getResource("progress.css").toExternalForm());
stage.setScene(new Scene(layout));
stage.show();
}

class ColoredProgressBar extends ProgressBar {
ColoredProgressBar(String styleClass, double progress) {
super(progress);
getStyleClass().add(styleClass);
}
}
}

简单示例程序输出:

coloredbars

带有单个动画进度条的更复杂的示例程序,该进度条会根据进度动态改变颜色:
import javafx.animation.*;
import javafx.application.Application;
import javafx.beans.value.*;
import javafx.event.*;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.util.Duration;

// shows a progress bar whose bar changes color depending on the amount of progress.
public class ColoredProgressBarStyleSheet extends Application {
public static void main(String[] args) { launch(args); }

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

@Override public void start(Stage stage) {
final ProgressBar bar = new ProgressBar();

final Timeline timeline = new Timeline(
new KeyFrame(Duration.millis(0), new KeyValue(bar.progressProperty(), 0)),
new KeyFrame(Duration.millis(3000), new KeyValue(bar.progressProperty(), 1))
);

Button reset = new Button("Reset");
reset.setOnAction(new EventHandler<ActionEvent>() {
@Override public void handle(ActionEvent event) {
timeline.playFromStart();
}
});

bar.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 < 0.2) {
setBarStyleClass(bar, RED_BAR);
} else if (progress < 0.4) {
setBarStyleClass(bar, ORANGE_BAR);
} else if (progress < 0.6) {
setBarStyleClass(bar, YELLOW_BAR);
} else {
setBarStyleClass(bar, GREEN_BAR);
}
}

private void setBarStyleClass(ProgressBar bar, String barStyleClass) {
bar.getStyleClass().removeAll(barColorStyleClasses);
bar.getStyleClass().add(barStyleClass);
}
});

final VBox layout = new VBox(10);
layout.setAlignment(Pos.CENTER);
layout.getChildren().setAll(bar, reset);
layout.getStylesheets().add(getClass().getResource("progress.css").toExternalForm());
stage.setScene(new Scene(layout));
stage.show();

timeline.play();
}
}

更复杂的示例程序输出:

sample program output

关于colors - JavaFX 进度条 : how to change bar color?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13357077/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com