2016-07-09 11 views
0

Ich konnte ein Gantt-Diagramm in JavaFX mit dieser Antwort Gantt chart from scratch erstellen.Hinzufügen von DateAxis zu Gantt Diagramm Javafx

Auch war ich in der Lage this- http://myjavafx.blogspot.com.by/2013/09/javafx-charts-display-date-values-on.html

Aber jetzt eine DateAxis hinzufügen, indem Sie ist unbrauchbar, weil aktuelles Gantt-Diagramm als Datum nicht verarbeitet „Länge“. Es zeichnet also den Anfang des Diagramms perfekt genau, aber das Ende des Diagramms kann überall sein, und wenn Sie das Fenster mit dem Diagramm ändern, wird das Ende noch zufälliger sein.

Ich füge neues Diagramm mit .add(new XYChart.Data(job.getTime(), machine, new ExtraData(timeLength, "status-red"))

wo "timeLength" i als Anzahl von Millisekunden eingestellt. Aber im Grunde funktioniert das nicht, und es kann nur lange erhalten. Außerdem kann ich JfreeChart nicht verwenden, weil ich es FXML nicht hinzufügen kann, die ich verwende.

Also wie kann ich sowohl am Anfang als auch am Ende jedes Diagramms genau werden?

Vielen Dank.

Antwort

0

Fügen Sie der DateAxis-Klasse die folgende Funktion hinzu, um den Skalierungsfaktor von Millisekunden bis zu visuellen Einheiten zu berechnen.

/** 
* @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; 
} 

Testergebnisse

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"))); 

Screenshot 1

Verwandte Themen