2016-07-09 9 views
0

Мне удалось составить диаграмму Ганта в JavaFX, используя этот ответ: Gantt chart from scratch.Добавление DateAxis в диаграмму gantt Javafx

Также я был в состоянии добавить DateAxis с помощью this- 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» я установил как число миллисекунд. Но в основном это не работает, и он может получить только long.Also я не могу использовать JfreeChart, потому что я не могу добавить его FXML, который я использую.

Итак, как я могу получить точное как начало, так и конец каждого графика?

спасибо.

ответ

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