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

名称中带有点(句号)的JavaFX css id选择器,java,css,javafx,css-selectors,Java,Css,Javafx,Css Selectors,我正在从事一个JavaFX项目,其中节点id必须是唯一的。这是通过使用完整路径名命名它们来实现的,例如myPane.button1。当我试图在css样式表中选择其中一个元素时,我不知道如何编写id选择器。下面是一个示例应用程序,其中有两个按钮,分别名为.button和thebutton: import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Button; imp

我正在从事一个JavaFX项目,其中节点id必须是唯一的。这是通过使用完整路径名命名它们来实现的,例如myPane.button1。当我试图在css样式表中选择其中一个元素时,我不知道如何编写id选择器。下面是一个示例应用程序,其中有两个按钮,分别名为.button和thebutton:

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");
}
,但我无法使JavaFX与元素匹配。我在JavaFX文档中找不到对Node.setId和JavaFX css引用的元素id的限制,但是如果不允许,那么更改名称将是一个很好的参数

JavaFX级联样式表CSS基于W3C CSS版本 2.1版本3的当前工作中添加了一些内容。JavaFXCSS还对CSS进行了一些扩展,以支持特定的JavaFX 特征

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

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

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


因此对id没有限制,但我无法编写选择它的选择器。我认为这是一个bug。

如果您解析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按钮只有一条规则,有两种方法可以理解原因:

一个人在看电视 另一个则是注意屏幕上的警告 我引述如下:

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

重点矿山


这意味着,如果您尝试的是属于CSS标准的东西,但Oracle文档中没有列出,那么您将遇到困难。

文档还说JavaFX CSS是W3C CSS的扩展,然后以a.b.c是有效id的方式定义id。选择器被定义为CSS2选择器,因此,我认为应该予以支持。列出的限制也不包含我的案例。我并不是说这是一个大问题,因为它很容易避免。“把它记录下来就好了。”也许是詹斯,我看错了。但对我来说,他们非常重视JavaFX层叠样式表的CSS,CSS基于W3CCSS 2.1版。Based与extension AFAIK非常不同。对我来说,使用的关键字以及造成整体差异的原因都是基于。它后来解释说它有一些扩展。然后,类比并不意味着相等或相同。@Mansueli然后有一个问题,JavaFXCSS解析器实际上接受了什么。很多东西在文档中没有明确定义,只是参考CSS标准进行了模糊描述。这里有一个限制列表,但是它还说,应该只接受文档中指定的语法。严格地说,这意味着不接受选择器,因为它们没有在文档中定义……我非常同意你的观点,这不是一个很好的文档示例。我相信这是堆栈溢出开始的原因之一。但是转义char可能是Oracle忽略的事情,他们甚至可能不会费心去实现,因为他们的文档非常模糊,因此他们可以避免遵从性。我很想说JavaFX10,他们说我们支持CSS3,并有一些扩展。我们可以希望。