名称中带有点(句号)的JavaFX css id选择器
我正在从事一个JavaFX项目,其中节点id必须是唯一的。这是通过使用完整路径名命名它们来实现的,例如myPane.button1。当我试图在css样式表中选择其中一个元素时,我不知道如何编写id选择器。下面是一个示例应用程序,其中有两个按钮,分别名为.button和thebutton:名称中带有点(句号)的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
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,并有一些扩展。我们可以希望。