将DateAxis添加到甘特图Javafx

时间:2016-07-09 02:02:55

标签: java javafx charts axis gantt-chart

我能够使用这个答案 - Gantt chart from scratch在JavaFX中制作甘特图。

此外,我还可以使用此功能添加DateAxis - http://myjavafx.blogspot.com.by/2013/09/javafx-charts-display-date-values-on.html

但是现在它无法使用,因为目前的甘特图并没有将“长度”作为日期来处理。所以它完全准确地绘制了图表的开头,但图表的结尾可以是任何地方,如果你用图表调整窗口大小,那么结尾将更加随机。

我正在添加新图表 .add(new XYChart.Data(job.getTime(), machine, new ExtraData( timeLength, "status-red"))

其中“timeLength”我设置为毫秒数。但基本上这不起作用,它只能收到很长时间。我也不能使用JfreeChart,因为我无法添加它使用的FXML。

那么我怎样才能在每张图表的开头和结尾都准确无误?

谢谢。

1 个答案:

答案 0 :(得分:0)

将以下函数添加到DateAxis类,以计算从毫秒到可视单位的比例因子。

/**
 * @return The scale factor from milliseconds to visual units 
 */
public double getScale(){
    final double length = getSide().isHorizontal() ? getWidth() : getHeight();

    // Get the difference between the max and min date.
    double diff = currentUpperBound.get() - currentLowerBound.get();

    // Get the actual range of the visible area.
    // The minimal date should start at the zero position, that's why we subtract it.
    double range = length - getZeroPosition();

    return length/diff;
}

测试结果

    Date startDate=new Date();
    long duration = 1000*60*1;//1 hour in milliseconds
    series1.getData().add(new XYChart.Data(startDate, machine, new ExtraData(duration, "status-green")));

    startDate = new Date(startDate.getTime()+duration);
    duration = 1000*60*1;//2 hours in milliseconds
    series1.getData().add(new XYChart.Data(startDate, machine, new ExtraData(duration, "status-red")));

屏幕截图1