【发布时间】:2017-10-08 20:37:29
【问题描述】:
我正在开发一个节点 ID 必须是唯一的 JavaFX 项目。这是通过使用“完整路径”名称命名它们来实现的,例如“myPane.button1”。当我尝试在 css 样式表中选择其中一个元素时,我无法弄清楚如何编写 id 选择器。这是一个示例应用程序,其中包含两个名为“the.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");
}
Escaping the dot should work,但我无法让 JavaFX 匹配该元素。我在 JavaFX 文档中找不到对元素 id 的限制,无论是在 Node.setId 还是在 JavaFX css 参考中,但如果不允许这样做,那么更改名称将是一个很好的论据。
The JavaFX CSS reference says that
JavaFX 级联样式表 (CSS) 基于 W3C CSS 版本 2.1 与当前版本 3 的一些添加。JavaFX CSS 也有一些 CSS 扩展以支持特定的 JavaFX 功能。
我会得出结论,这意味着有效的 W3C CSS 文件也是有效的 JavaFX CSS 文件。然后将id定义为
场景图中的每个节点都有一个 id 变量,一个字符串。这是 类似于可以出现 HTML 元素的 id="..." 属性。 为节点的 id 变量提供字符串会导致样式属性 使用该 ID 查找此节点。特定 ID 的样式 可以使用样式表中的“#nodeid”选择器语法来指定。
For HTML, the id attribute's naming convention is
命名规则:必须至少包含一个字符 不能包含任何字符 空格字符 在 HTML 中,所有值都不区分大小写
所以对id没有限制,但是我不能写一个选择它的选择器。我认为这是一个错误。
【问题讨论】:
-
对我来说,所使用的关键字以及造成整体差异的原因是基于。它后来解释说它有一些扩展。那么,analogous并不意味着等于也不相同。
-
@Mansueli 然后是 JavaFX CSS 解析器实际接受的问题。许多事情没有在文档中明确定义,只是在参考 CSS 标准时进行了模糊描述。有一个限制列表,但它也说应该只接受文档中指定的语法。严格来说,这意味着选择器不被接受,因为它们没有在文档中定义......
-
我非常同意你的观点,这不是一个很好的文档示例。我相信这是 Stack Overflow 开始 this 的原因之一。但是转义字符可能是甲骨文忽略的事情,他们可能甚至不会费心去实现,因为他们的文档足够模糊,可以避免合规性。我很乐意说 JavaFX 10 他们说
we support CSS3 with some extension。我们可以希望。
标签: java css javafx css-selectors