JavaFX的2调试CSS(JavaFX 2 debug css)

2019-07-29 13:09发布

我使用JavaFX工作时,与一些CSS样式挣扎..

我不知道是否有任何的方式来调试CSS?

财产以后类似Firebug或Chrome的构建工具,能告诉你,当你按下一个元素是什么CSS样式应用到它。

Answer 1:

有一看晓晖看到它有点至少满足您的需求。



Answer 2:

除了使用ScenicView作为Uluk建议,有时候我也只是转储到控制台活动节点呈现出穗后。 这个默认toString()为节点列出它们的CSS ID和样式类。

// debugging routine to dump the scene graph.
public  static void dump(Node n) { dump(n, 0); }
private static void dump(Node n, int depth) {
  for (int i = 0; i < depth; i++) System.out.print("  ");
  System.out.println(n);
  if (n instanceof Parent) 
    for (Node c : ((Parent) n).getChildrenUnmodifiable()) 
      dump(c, depth + 1);
}

输出示例:

BorderPane@13c3750
  Text@2e3919[styleClass=lyric-text]
  Button[id=null, styleClass=button change-lyric]
    ButtonSkin[id=null, styleClass=button change-lyric]
      ImageView@13a4e73
      LabeledText@567aef[styleClass=text]

周围有CSS处理一些无证内部API,但没有公开。

使这个公共API的请求是在这里: 在Java的CSS样式对象模型 。 您创建一个名为StyleMap设定的事情,它连接到一个节点,这实际上造成它记录了你所添加的StyleMap设定发生的节点的CSS处理更改的侦听器。

public void addStyleMaps(Node node, int depth) {
  node.impl_setStyleMap(FXCollections.observableMap(new HashMap<WritableValue, List<Style>>()));
  if (node instanceof Parent) {
    for (Node child : ((Parent) node).getChildrenUnmodifiable()) {
      addStyleMaps(child, depth + 1);
    }
  }
}

如果修改了上面=>转储程序

System.out.println(n + " " + node.impl_getStyleMap());

那么该程序也将打印出风格的变化,因为stylemaps加入的节点。

注意上面的呼叫使用它被废弃在未来的JavaFX版本这可以(可能会)的变化,并不会收到使用和公共API的测试支持的impl_ API。

我认为,虽然,对于这一点,你就不会觉得它太有用了,直至机制落实到像ScenicView以交互方式提供Firebug的CSS样式信息的图形工具。 我不认为ScenicView是开源又和内部CSS实现不公开发布,所以它可能很难自己创建这样的一个工具。



文章来源: JavaFX 2 debug css