css 如何动态创建样式表并将其添加到节点[已关闭]

qgzx9mmu  于 2023-01-03  发布在  其他
关注(0)|答案(3)|浏览(139)

两年前关闭了。
这篇文章是昨天编辑并提交审查的。
Improve this question
当前JavaFX不允许将样式表附加到类路径之外的节点(或场景)。因此,如果css文件已经不在类路径中,则无法将其添加到任何节点。getStyleSheets(). add()方法将声明"WARNING Resource [your file] not found"。因此,对于此限制,是否有任何变通方案?

pdsfdshx

pdsfdshx1#

不确定这是不是你要找的...

Button node = new Button();
node.getStyleClass().add("my-new-style-class");

.my-new-style-class {
    -fx-padding: 5;
}
vc9ivgsu

vc9ivgsu2#

其思想是创建一个临时样式表文件,在其中写入新的样式类,将样式表添加到节点的表列表中,并添加新的样式类。

下面是一个工作示例:

Button button = new Button("My Text");

button.setOnAction(e -> {

    try {
        // Create a new tempfile that will be removed as the application exits
        File tempStyleClass = File.createTempFile("AppXY_TempStyleClass", ".css");
        tempStyleClass.deleteOnExit();

        // Write the stlye-class inside
        try (PrintWriter printWriter = new PrintWriter(tempStyleClass)) {
            printWriter.println(".temp-style { -fx-text-fill: red; }");
        }

        // Add the style-sheet and the style-class to the node
        button.getStylesheets().add(tempStyleClass.toURI().toString());
        button.getStyleClass().add("temp-style");

    } catch (IOException e1) {
        e1.printStackTrace();
    }
});
4ktjp1zp

4ktjp1zp3#

好吧,晚了,晚了两年,但也许能帮上忙。
这个想法是这样的:

object.setStyle("[your CSS code]");

为名为“node”的对象给予红色背景色的示例:

node.setStyle("fx-background-color: red");

希望能帮上忙。

相关问题