JavaFX BarChart实现 - 为什么要将StackPanes用于条形图?

时间:2015-04-23 21:50:27

标签: java charts javafx javafx-8

我一直在深入研究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作为酒吧的事实让我有几个问题:

  • 为什么?是不是因为某种奇怪的表演原因而不明白?
  • 选择是否是任意的,并且另一个实现大致相同但使用矩形的效果一样好吗?
  • BarChart中条形的颜色是使用-fx-bar-fill属性指定的(在JavaFX CSS Reference Guide中未记录)但是我在OpenJFX源中找不到指定和查找此属性的任何位置因为,这实际上是如何运作的?
  • 在Ensemble8 Candle.java中的CandleStickChart实现中,单个蜡烛(非常类似于BarChart的条形图)实际上是包含灯芯线和蜡烛本身区域的组。这与我的个人实现不同,也与BarChart实现不同 - 这个选择也是任意的,或者是否有充分的理由使用这些类而不是2个矩形或1个矩形和1个线,比如说。

1 个答案:

答案 0 :(得分:3)

  

为什么要将StackPanes用于吧?

我对JavaFX团队的思想一无所知,但我怀疑是因为CSS支持的选择。由于StackPane继承自Region,因此它支持一组非常丰富的可自定义属性,例如背景,边框甚至形状。因此,在BarChart中,您可以使用外部样式表在条上设置任意背景图像。相比之下,Shapes支持更有限的可设置属性集。理论上,无论如何,直接使用StackPane而不是Region将允许向条形图添加更多节点,但我认为任何此类代码都会非常难看。

  

BarChart中条形的颜色使用-fx-bar-fill指定   属性......这实际上是如何工作的?

-fx-bar-filllooked-up color,在默认样式表modena.css中定义。一般来说,默认样式表的文档很差:除了查看上面链接的源代码之外,没有真正的方法可以知道为哪些节点类型定义了哪些查找颜色(但是,公平地说,很难看出是什么任何此类文档可能看起来像任何带有正确信息的形式,并且比css文件更容易访问。)

  

在Ensemble8的CandleStickChart实现中......再次是这样   选择任意或是否有充分的理由使用这些类   例如,与2个矩形或一个矩形和1个线相对。

鉴于烛台图表节点看起来像一条线和一个矩形,使用包含一条线的Group和其他东西是有意义的。如果您接受条形图的CSS参数,那么使用某种类型的RegionRegion子类对我来说是有意义的。