我一直在深入研究JavaFX中图表的实现,并注意到在BarChart.java中,StackPanes用于各个条形图,如下所示:
bar = new StackPane();
item.setNode(bar);
bar.getStyleClass().addAll("chart-bar", "series" + seriesIndex, "data" + itemIndex);
稍后(在layoutPlotChildren(...)
中):
bar.resizeRelocate(xPos, bottom, barWidth, top - bottom);
在我看来,更合乎逻辑的选择是使用Rectangle,特别是因为使用形状类的JavaFX Peformance Tips and Tricks状态(即使它们必须重新创建,因为它们不能直接调整大小更快)而不是使用区域/窗格。
我问这个问题的主要原因是因为我有一个自定义图表实现(烛台图表),它使用矩形作为蜡烛,我希望这些条形图的样式相同。为Rectangle创建样式类使用不同的CSS属性(-fx-fill
,-fx-smooth
,-fx-stroke
等),而Region / Pane使用-fx-background-color
,-fx-border-color
并且甚至没有指定-fx-smooth
的选项,因此我不能将一个主要的样式类用于蜡烛和酒吧。
BarChart使用StackPane作为酒吧的事实让我有几个问题:
-fx-bar-fill
属性指定的(在JavaFX CSS Reference Guide中未记录)但是我在OpenJFX源中找不到指定和查找此属性的任何位置因为,这实际上是如何运作的?答案 0 :(得分:3)
为什么要将StackPanes用于吧?
我对JavaFX团队的思想一无所知,但我怀疑是因为CSS支持的选择。由于StackPane
继承自Region
,因此它支持一组非常丰富的可自定义属性,例如背景,边框甚至形状。因此,在BarChart
中,您可以使用外部样式表在条上设置任意背景图像。相比之下,Shape
s支持更有限的可设置属性集。理论上,无论如何,直接使用StackPane
而不是Region
将允许向条形图添加更多节点,但我认为任何此类代码都会非常难看。
BarChart中条形的颜色使用-fx-bar-fill指定 属性......这实际上是如何工作的?
-fx-bar-fill
是looked-up color,在默认样式表modena.css中定义。一般来说,默认样式表的文档很差:除了查看上面链接的源代码之外,没有真正的方法可以知道为哪些节点类型定义了哪些查找颜色(但是,公平地说,很难看出是什么任何此类文档可能看起来像任何带有正确信息的形式,并且比css文件更容易访问。)
在Ensemble8的CandleStickChart实现中......再次是这样 选择任意或是否有充分的理由使用这些类 例如,与2个矩形或一个矩形和1个线相对。
鉴于烛台图表节点看起来像一条线和一个矩形,使用包含一条线的Group
和其他东西是有意义的。如果您接受条形图的CSS参数,那么使用某种类型的Region
或Region
子类对我来说是有意义的。