我正在开发一个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没有限制,但我不能编写一个选择它的选择器。我认为这是一个错误。
答案 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的文档中列出,那么您将会遇到困难。