2016-07-09 1 views
0

J'ai été en mesure de créer un diagramme de Gantt dans JavaFX en utilisant cette réponse: Gantt chart from scratch.Ajout de DateAxis au diagramme de Gantt Javafx

i a pu également ajouter un DateAxis en utilisant this- http://myjavafx.blogspot.com.by/2013/09/javafx-charts-display-date-values-on.html

Mais maintenant il est inutilisable, car le diagramme de Gantt actuel ne gère pas « longueur » comme une date. Donc, il dessine le début du graphique parfaitement avec précision, mais la fin du graphique peut être n'importe où, et si vous redimensionnez la fenêtre avec le graphique, la fin sera encore plus aléatoire.

J'ajoute une nouvelle carte avec .add(new XYChart.Data(job.getTime(), machine, new ExtraData(timeLength, "status-red"))

où "Timelength" i défini comme nombre de millisecondes. Mais fondamentalement cela ne fonctionne pas, et il ne peut recevoir que longtemps. Je ne peux pas non plus utiliser JfreeChart, parce que je ne peux pas ajouter le FXML que j'utilise. Alors, comment puis-je obtenir une précision à la fois au début et à la fin de chaque graphique?

Merci.

Répondre

0

Ajoutez la fonction suivante à la classe DateAxis pour calculer le facteur d'échelle des millisecondes aux unités visuelles.

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

Résultats des tests

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

capture d'écran 1