JavaFX 2调试css

在使用JavaFX时,我正在努力处理一些CSS样式。

我想知道是否有任何方法来调试CSS?

像firebug或chrome中的内置工具一样,当你按下一个css样式适用于它的元素时会显示你。

看看Scenic View ,看它是否至少满足您的需求。

除了使用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>())); if (node instanceof Parent) { for (Node child : ((Parent) node).getChildrenUnmodifiable()) { addStyleMaps(child, depth + 1); } } } 

如果将上面的转储例程修改为=>

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

然后,例程也将打印样式更改,因为样式图已添加到节点。

请注意,上面的调用使用了一个不推荐使用的impl_ api,它可以(也可能会)在将来的JavaFX版本中更改,并且不会收到public api的使用和测试支持。

我认为,为此,在将机制实现到像ScenicView这样的图形工具中以交互式地提供Firebug样式的css信息之前,你不会发现它太有用。 我不认为ScenicView尚未开源,内部css实现也没有公开记录,因此自己创建这样的工具可能很困难。