JFreeChart - changement SeriesStroke d'un tableau de l'état solide à anéantis en une seule ligne
La réponse acceptée ici (JFreechart(Java) - Comment dessiner des lignes qui est partiellement lignes en pointillés et en partie par des lignes pleines?) m'a permis de lancer sur le chemin de l'évolution de mon seriesstroke lignes sur mon graphique. Après avoir marché à travers mon code et en regardant les changements, je vois que mon seriesstroke, dans les faits, le changement de "dashedStroke" quand il est censé (après une certaine date "dashedAfter"), mais lorsque le diagramme est rendu à l'ensemble de la série est la ligne en pointillés. Comment puis-je obtenir une série de ligne doit être tracée solide à la première et se précipita après une date fixée?
/* series line modifications */
final Number dashedAfter = timeNowDate.getTime();
XYLineAndShapeRenderer render = new XYLineAndShapeRenderer() {
Stroke regularStroke = new BasicStroke();
Stroke dashedStroke = new BasicStroke(
1.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND,
1.0f, new float[] {10.0f, 6.0f}, 0.0f );
@Override
public Stroke getItemStroke(int row, int column) {
Number xVal = cd.getXValue(row, column);
if (xVal.doubleValue() > dashedAfter.doubleValue()) {
return dashedStroke;
} else {
return regularStroke;
}
}
};
render.setBaseShapesVisible(false);
render.setBaseShapesFilled(true);
render.setDrawSeriesLineAsPath(true);
plot.setRenderer(render);
OriginalL'auteur MAK Design Labs | 2012-11-05
Vous devez vous connecter pour publier un commentaire.
Avez-vous essayé de mise en œuvre de
AbstractRenderer#getItemStroke
?Dans cet exemple, je suis en utilisant une ligne en pointillés pour x > 4 pour la série 2:
Bien que cet exemple est l'utilisation et
XYSeries
et non les dates que vous shold être en mesure de le modifier pour vos besoins.Ici est l'exemple complet
Ce n'est plus le long des lignes de l'exemple que j'ai lié, et plus près de là où j'ai commencé à essayer de toute cette affaire. J'espérais que certaines de ces suggestions aider, mais je suis toujours le même problème de la ligne de ne pas changer de solide à en pointillés, mais le fait de l'un ou de l'autre. J'ai re-posté mon code afin de refléter les changements. Toute aide est très appréciée!
si vous pouvez sortir ensemble autonomes exemple (SSCCE) je vais essayer le code pour vous. Il est difficile de voir ce qui happing sans les données
Voici plus d'informations sur sscce.
En fait, il semble que j'ai été d'avoir une variable de problèmes et c'est pourquoi cela ne fonctionnait pas correctement.
OriginalL'auteur GrahamA
La
setDrawSeriesLineAsPath()
méthode de "contrôle si oui ou non chaque série est dessinée comme un seul chemin d'accès." Cela s'oppose à la modification de laStroke
de manière dynamique, commegetItemStroke()
sera appelée qu'une seule fois par série.Addendum: Un moyen facile de vérifier que c'est pour invoquer
setDrawSeriesLineAsPath()
dans @GrahamA de l'exemple et de rupture dedrawFirstPassShape()
dans le débogueur.NAFAIK, bien que j'aime
ChartPanel#setMouseWheelEnabled(true)
pour faciliter le zoom. Je suppose que vous pourriez permettre à l'utilisateur d'activer la vue comme vous le souhaitez, pour exemple.si les points sont rapprochés pourquoi ne pas varier la couleur plutôt que le style de trait, exemple here.
OriginalL'auteur trashgod
Je pense que vous le faites à droite et si il ne marche pas c'est peut-être pas possible? Je suis juste deviner ici, mais vous pouvez tracer 2 lignes au lieu de 1. Votre deuxième ligne de commencer à l'endroit où votre première ligne se termine. Qui pourrait être gênant si vous souhaitez modifier le contour beaucoup et que vous voulez le changer à chaque itération de la boucle en fonction d'une condition, votre code sera probablement obtenir beaucoup plus compliqué. Ou il suffit de dessiner une nouvelle ligne pour chaque.
OriginalL'auteur fonZ