我绘制了更多的图形和大量的测量图形,这些图形在lineChart看起来像字母旋转H.测量的数量是动态的,在20-1000之间。首先我为所有图形创建ObservableList,然后插入一些值,然后我将它们添加到seriesLineChart中,然后将seriesLineChart添加到lineChart。
问题是我尝试了很多解决方案,但没有足够的好处。一些工作正常,5个例子休息他们崩溃。我想为某些图形设置圆圈并设置图形的颜色。
首先,我需要我所需要的一切:
public static LineChart<Date, Number> lineChart; //the line chart
ObservableList<XYChart.Series<Date, Number>> seriesLineChart = FXCollections.observableArrayList(); //I put all graphs into this
ObservableList<XYChart.Data<Date, Number>> Errors = FXCollections.observableArrayList();
ObservableList<XYChart.Data<Date, Number>> graphNext = FXCollections.observableArrayList();
ObservableList<XYChart.Data<Date, Number>> deadLine = FXCollections.observableArrayList();
ObservableList<XYChart.Data<Date, Number>> MaximumError = FXCollections.observableArrayList();
//HERE I MADE DYNAMIC MEASUREMENTS IT DEPENDES OF SOME PARAMETERS
XYChart.Series measurement1;
XYChart.Series measurement1000;
将数据插入除测量之外的所有图表
for(int i=0: i<data.length; i++){
GraphNext.add(new XYChart.Data<Date, Number>(new GregorianCalendar(nextYearCalib, Integer.valueOf(splitDate[i])-1, Integer.valueOf(splitDate[i])).getTime(),data[i]));
} //THE LENGTH OF splitDate IS LIKE data AND I DO SOMETHING LIKE THIS FOR ALL GRAPHS EXCEPT Measurements
测量结果如下:
for(int i=0: i<measurementX.length; i++){ //X=1...1000(max)
measurementX.getData().add(new XYChart.Data<Date, Number>(new GregorianCalendar(Integer.valueOf(date[0]), Integer.valueOf(date[1])-1, Integer.valueOf(date[2])).getTime(),value));
}
在seriesLineChart中添加所有这些图:
seriesLineChart.add(new XYChart.Series<>("SOME TEXT WHICH WILL BE TITLE IN LEGEND BELOW THE LINECHART" +, Errors));
seriesLineChart.add(new XYChart.Series<>("SOME TEXT WHICH WILL BE TITLE IN LEGEND BELOW THE LINECHART" +, graphNext));
seriesLineChart.add(new XYChart.Series<>("SOME TEXT WHICH WILL BE TITLE IN LEGEND BELOW THE LINECHART" +, deadLine));
seriesLineChart.add(new XYChart.Series<>("SOME TEXT WHICH WILL BE TITLE IN LEGEND BELOW THE LINECHART" +, MaximumError));
seriesLineChart.add(measurement1);
....
seriesLineChart.add(measurement100); //LET'S SAY FOR X=1..100
将seriesLineChart添加到lineChart:
lineChart.setLegendVisible(true); //sets legend below graph is visible
lineChart.setData(seriesLineChart); //put seriesLineChart
lineChart.setCreateSymbols(false); //this instruction disable to draw circles on every graph
CSS文件如下:
/* graph errors */
.default-color0.chart-series-line {
-fx-stroke: #0181e2, white;
-fx-background-radius: 5px;
}
/* .default-color0.chart-legend-item-symbol{
-fx-stroke: #f9d900, white;
}*/
.default-color0.chart-line-symbol {
-fx-background-color: #0181e2, white;
-fx-background-radius: 5px;
}
/* graph next */
.default-color1.chart-series-line {
-fx-stroke: #ffaaaa, white;
}
/* .default-color1.chart-legend-item-symbol{
-fx-stroke: #a9e200, white;
} */
.default-color1.chart-line-symbol {
-fx-background-color: #ffaaaa, white;
}
/* graph deadline */
.default-color2.chart-series-line {
-fx-stroke: #a9e200, white;
-fx-background-radius: 30px;
}
/* .default-color2.chart-legend-item-symbol{
-fx-stroke: #ff0000, white;
}*/
.default-color2.chart-line-symbol {
-fx-background-color: #a9e200, white;
}
/* graph maxerror */
.default-color3.chart-series-line {
-fx-stroke: #ff0000, white;
}
/* .default-color3.chart-legend-item-symbol{
-fx-background-color: #000000, black;
} */
.default-color3.chart-line-symbol {
-fx-background-color: #ff0000, white;
}
.default-color4.chart-series-line {
-fx-stroke: #000000, white;
}
.default-color4.chart-line-symbol {
-fx-background-color: #000000, white;
}
//AND SO ON TO THE 1000
/* graph measurement */
.default-color1000.chart-series-line {
-fx-stroke: #000000, white;
}
.default-color1000.chart-line-symbol {
-fx-background-color: #000000, white;
}
.default-colorX.chart-series-line设置为测量图的颜色 .default-color1000.chart-line-symbol设置为图表图例的颜色
在我的代码中我也设置了CSS文件,这不是默认的,因为我需要特定的颜色。它是在我在线图上绘制之前设置的。 。scena.getStylesheets()添加(的getClass()的getResource( “观看/ styleLineChart.css”)toExternalForm());
你可以先得到图表,然后是graphMeasurment。 在我绘制之前我使用:lineChart.setCreateSymbols(false);.但在我的错误和graphNext上,我需要这些圈子。所以我已经分析了这个问题如何解决它:
在CSS中为错误和graphNext
在CSS中启用它和其他人(不是Error和graphNext)以删除圈子
我无法在一个lineChart上添加更多sereisLineChart,因为它显示的是最后一个。
例如:
lineChart.setData(seriesLineChartErrors);
lineChart.setCreateSymbols(true);
lineChart.setData(seriesLineChartGraphNext);
lineChart.setCreateSymbols(true);
lineChart.setData(seriesLineChart); //all others deadilne, maxError and all mesaruments
lineChart.setCreateSymbols(false);
我没有为每个图设置符号的任何方法。
也许我没有计划好我的图表,因为所有Observebal列表和Observbel列表的ObservabelLists等等。
我还在图表中总结了我的传奇。我使用图表和一个只有一个测量。测量从2到X我删除。我想成为我的圈子和传统图表一样的传奇。
for(Node n: lineChart.getChildrenUnmodifiable()){
if(n instanceof Legend){
final Legend legend = (Legend) n;
ObservableList<LegendItem> legItem = legend.g!etItems();
for(int i=0; i<legItem.size(); i++){
legItem.remove(5, legItem.size());
legend.setItems(legItem);
}
}
}
我也试过这个图表来获取他们的CSS我不会工作:
for(Node n: lineChart.getChildrenUnmodifiable()){
if(n instanceof Chart){
final Chart chart = (Chart) n;
chart.getStyleClass());
/*TO ADD SOME CODE TO MANIPULATE CSS BUT I SAW THIS CAN'T BE DONE*/
}
}
我也尝试了类似的东西,但我现在不知道如何编程我的视图/ styleLineChart.css。我认为这将是最好的解决方案。
val s = new XYChart.Series[Number, Number]();
s.setName(measurementX); //X=[4-1000]
s.getNode.getStyleClass.add("series-" + seriesName);
我的最后一个选择是我会绘制圆圈并将它们插入到Errors和graphNext中。但我不喜欢这样做。
所以我可以更容易理解我用简单的解释来调整图像。第二个是它应该是什么样子。 我希望你能帮助我!
第一张图片:https://dl.dropboxusercontent.com/u/30889532/image.png 第二张图片:https://dl.dropboxusercontent.com/u/30889532/image2.png