JavaFX css id选择器,名称中带有点(句号)

时间:2017-05-10 09:21:29

标签: java css javafx css-selectors

我正在开发一个JavaFX项目,其中节点ID必须是唯一的。这是通过使用"完整路径命名它们来实现的。名称,例如" myPane.button1&#34 ;.当我尝试在css样式表中选择其中一个元素时,我无法弄清楚如何编写id选择器。这是一个带有两个按钮的示例应用程序,名为" the.button"和"按钮":

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class CssTest extends Application {

    public static void main(final String[] args) {
        Application.launch(args);
    }

    @Override
    public void start(final Stage stage) {
        VBox vbox = new VBox();
        Button b1 = new Button();
        b1.setId("the.button");
        b1.setText("BUTTON1");

        Button b2 = new Button();
        b2.setId("thebutton");
        b2.setText("BUTTON2");

        vbox.getChildren().addAll(b1, b2);
        vbox.getStylesheets().add("stylesheet.css");

        final Scene scene = new Scene(vbox);

        stage.setScene(scene);
        stage.show();
    }    
}

css文件是

#the\.button {
    -fx-graphic: url("Keyboard.png");
}

#thebutton {
    -fx-graphic: url("Keyboard.png");
}

Escaping the dot should work,但我无法让JavaFX与元素匹配。我无法在JavaFX文档中找到对Node.setId和JavaFX css引用中的元素id的限制,但如果不允许,则更改名称将是一个很好的参数。

The JavaFX CSS reference says that

  

JavaFX层叠样式表(CSS)基于W3C CSS版本   2.1在版本3的当前工作中增加了一些内容.JavaFX CSS还有一些CSS扩展,支持特定的JavaFX   特征

我的结论是,这意味着有效的W3C CSS文件也是一个有效的JavaFX CSS文件。然后将id定义为

  

场景图中的每个节点都有一个id变量,一个字符串。这是   类似于id =" ..."可以显示HTML元素的属性。   为节点的id变量提供字符串会导致样式属性   使用该ID查找此节点。特定ID的样式   可以使用"#nodeid"来指定。样式表中的选择器语法。

For HTML, the id attribute's naming convention is

  

命名规则:必须至少包含一个字符不得包含任何字符   空格字符在HTML中,所有值都不区分大小写

因此对id没有限制,但我不能编写一个选择它的选择器。我认为这是一个错误。

1 个答案:

答案 0 :(得分:1)

如果你解析你的CSS,你会看到:

    public static void main(String[] args) {
         CSSParser cssParser =  new com.sun.javafx.css.parser.CSSParser();
         Stylesheet s = cssParser.parse("#the\\.button {\n" +
"    -fx-graphic: url(\"Keyboard.png\");\n" +
"}\n" +
"\n" +
"#thebutton {\n" +
"    -fx-graphic: url(\"Keyboard.png\");\n" +
"}");
         System.out.println(""); //add a breakpoint here
    }

ID thebutton只有一条规则,有两种方法可以理解原因:

我在下面引用:

  

虽然JavaFX CSS解析器将解析有效的CSS语法,但它不是完全兼容的CSS解析器。 不应期望解析器处理本文档中未指定的语法。

强调我的

这意味着如果您正在尝试属于CSS标准的内容,但未在Oracle的文档中列出,那么您将会遇到困难。