JavaFX项目的单独css文件

xqkwcwgp  于 2023-05-15  发布在  Java
关注(0)|答案(1)|浏览(186)

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

  1. package com.example.demo;
  2. import javafx.application.Application;
  3. import javafx.fxml.FXMLLoader;
  4. import javafx.scene.Scene;
  5. import javafx.scene.control.Label;
  6. import javafx.scene.layout.Pane;
  7. import javafx.scene.shape.Line;
  8. import javafx.stage.Stage;
  9. import java.io.IOException;
  10. public class HelloApplication extends Application {
  11. @Override
  12. public void start(Stage stage) throws IOException {
  13. Pane root = new Pane();
  14. Scene scene = new Scene(root, 1200, 800);
  15. stage.setTitle("Simulink viewer");
  16. Label l1 = new Label("hdkhsd");
  17. l1.setLayoutX(100);
  18. l1.setLayoutY(100);
  19. Label l2 = new Label("helle");
  20. l2.setLayoutX(400);
  21. l2.setLayoutY(400);
  22. root.getChildren().addAll(l1,l2);
  23. Line l = new Line(10,10,90,90);
  24. root.getChildren().add(l);
  25. scene.getStylesheets().add(getClass().getResource("style.css").toExternalForm());
  26. stage.setScene(scene);
  27. stage.show();
  28. }
  29. public static void main(String[] args) {
  30. launch();
  31. }
  32. }

这是一个CSS文件:

  1. .root{
  2. -fx-background-color : #ADD8E6;
  3. }
  4. .label {
  5. -fx-border-color: red;
  6. }
  7. .line {
  8. -fx-stroke = green;
  9. }

该样式对root和label都有效,但对line无效。有什么问题吗?
我得到了这个警告:
2023年5月13日下午4:31:05 javafx.css.CssParser声明警告:CSS错误解析文件:/E:/College/Now/Advanced/Projects/normal%20java%20projects/demo/target/classes/com/example/demo/style.css:[10,11]处的预期COLON
我实际上读到line的样式类默认为空。那是什么意思?这是否意味着我不能在一个单独的css文件中样式行?

ct2axkht

ct2axkht1#

首先,注意你的CSS文件中有一个语法错误:

  1. -fx-stroke = green;

应该是

  1. -fx-stroke: green;

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

  1. Line l = new Line(10,10,90,90);
  2. l.getStyleClass().add("line");

或使用类型选择器。来自文档:
Node的getTypeSelector方法返回一个类似于CSS类型选择器的String。默认情况下,此方法返回类的简单名称。
因此,下面的代码将在不添加Java代码中的样式类的情况下工作:

  1. Line {
  2. -fx-stroke: green;
  3. }
展开查看全部

相关问题