javafx中创建css,动态JavaFX中添加CSS样式表(Dynamically add CSS stylesheets

我想补充位于某个文件系统中的CSS文件。 目的是编写一个应用程序,用户可以添加JavaFX的CSS文件(这是由人创造和位于任何地方)动态。

我想类似的东西,只是为了测试,看看是否动态添加CSS文件的工作:

public class Main extends Application {

@Override

public void start(Stage primaryStage) throws Exception{

Label label = new Label("Hello");

Scene scene = new Scene(label);

//file would be set by an file chosser

File file = new File("C:/test.css");

scene.getStylesheets().add(file.getAbsolutePath());

primaryStage.setTitle("Title");

primaryStage.setScene(scene);

primaryStage.show();

}

public static void main(String[] args) {

launch(args);

}

}

但是,我总是得到同样的错误:

WARNING: com.sun.javafx.css.StyleManager loadStylesheetUnPrivileged Resource "C:\test.css" not found.

我怎样才能解决这个问题?

Answer 1:

你的问题是,你不使用的URL。 在这里你可以找到关于CSS如何加载旁边的CSS参考更多的文档。

如果你有一个网址String ,你可以使用像这样的外部文件动态设置CSS:

private boolean isANext = true;

public void start(Stage primaryStage) throws Exception {

Button button = new Button("Change CSS");

VBox vbox = new VBox(10);

vbox.setAlignment(Pos.CENTER);

vbox.getChildren().add(button);

scene = new Scene(vbox, 200, 200);

button.setOnAction(ev -> {

// Alternate two stylesheets just for this demo.

String css = isANext ? "file:///C:/temp/a.css" : "file:///C:/temp/b.css";

isANext = !isANext;

System.out.println("Loading CSS at URL " + css);

scene.getStylesheets().clear();

scene.getStylesheets().add(css);

});

primaryStage.setTitle("Title");

primaryStage.setScene(scene);

primaryStage.show();

}

在a.css

.button {

-fx-text-fill: white;

-fx-background-color: red;

}

而在b.css

.button {

-fx-text-fill: white;

-fx-background-color: black;

}

Answer 2:

如果CSS在同一packaage简单地使用

scene.getStylesheets().add(getClass().getResource("style.css").toExternalForm());

Answer 3:

你可以从URL java.io.File

File file = new File("style.css");

URL url = file.toURI().toURL();

scene.getStylesheets().add(url.toExternalForm());

或短形式

scene.getStylesheets().add((new File("style.css")).toURI().toURL().toExternalForm());

Answer 4:

该异常被抛出,因为该字符串"C:/test.css"是不是一个URI资源。 因此,您必须将字符串转换成URI资源。

从Java 7,你可以这样做:

String uri = Paths.get("C:/test.css").toUri().toString();

scene.getStylesheets().add(uri);

Answer 5:

scene.setUserAgentStylesheet("Assets/StyleSheets/Styless.css");

文章来源: Dynamically add CSS stylesheets in JavaFX

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值