JavaFX 项目的单独 css 文件

0 css java javafx javafx-11

如何为 javaFX 项目的单独 css 文件中的所有线条对象应用某种样式?这是java代码:

package com.example.demo;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.Pane;
import javafx.scene.shape.Line;
import javafx.stage.Stage;

import java.io.IOException;

public class HelloApplication extends Application {
    @Override
    public void start(Stage stage) throws IOException {
        Pane root = new Pane();
        Scene scene = new Scene(root, 1200, 800);
        stage.setTitle("Simulink viewer");
        Label l1 = new Label("hdkhsd");
        l1.setLayoutX(100);
        l1.setLayoutY(100);
        Label l2 = new Label("helle");
        l2.setLayoutX(400);
        l2.setLayoutY(400);
        root.getChildren().addAll(l1,l2);
        Line l = new Line(10,10,90,90);
        root.getChildren().add(l);
        scene.getStylesheets().add(getClass().getResource("style.css").toExternalForm());
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是 css 文件:

.root{
-fx-background-color : #ADD8E6;
}

.label {
-fx-border-color: red;
}

.line {
-fx-stroke = green;

}
Run Code Online (Sandbox Code Playgroud)

该样式适用于根和标签,但不适用于行。问题是什么?

我收到此警告:

2023 年 5 月 13 日 4:31:05 PM javafx.css.CssParser 声明警告:CSS 解析文件时出错:/E:/College/Now/Advanced/Projects/normal%20java%20projects/demo/target/classes/com/example /demo/style.css:预期冒号位于 [10,11]

我实际上读到线条的样式类默认为空。这意味着什么?这是否意味着我无法在单独的 css 文件中设置线条样式?

Jam*_*s_D 5

首先,请注意 CSS 文件中存在语法错误:

-fx-stroke = green;
Run Code Online (Sandbox Code Playgroud)

应该

-fx-stroke: green;
Run Code Online (Sandbox Code Playgroud)

另外,请注意文档中的样式类Line默认为空。(仅Control及其子类,以及ImageViewWebViewMediaView具有默认样式类。)因此,选择器将不会选择该行。您可以显式地将样式类添加到该行:

    Line l = new Line(10,10,90,90);
    l.getStyleClass().add("line");
Run Code Online (Sandbox Code Playgroud)

或者我们是类型选择器。从文档中:

Node 的 getTypeSelector 方法返回一个类似于 CSS 类型选择器的字符串。默认情况下,此方法返回类的简单名称。

因此,无需在 Java 代码中添加样式类,以下代码即可工作:

Line {
-fx-stroke: green;

}
Run Code Online (Sandbox Code Playgroud)