J'ai des difficultés à dessiner une image sur un JFreeChart - XYLineChart. Le principal problème est que les coordonnées x et y de l'annotation sont mises à jour dynamiquement en temps réel. Donc, avec mon code, ajouter l'annotation et l'effacer pour que la nouvelle soit dessinée provoque un scintillement gênant pour l'utilisateur.Scintillement XYImageAnnotation sur JFreeChart avec temporisateur
J'ai vérifié quelques exemples de problèmes de scintillement sur JAVA en utilisant les méthodes update(), paint() ou repaint() en utilisant des graphiques, mais ne semble pas implémentable sur un JFreeChart.
Avez-vous des idées pour vous débarrasser du scintillement ou d'une solution de contournement pour utiliser une image bufferedImage sur JFreeChart au lieu d'une annotation?
Pour être ici plus spécifique est la ligne tracée et l'image:
Alors cette croix (comme l'image en mémoire tampon) doit aller sur la ligne de tracé de haut en bas avec les valeurs mises à jour de axe x et y.Mais ce mouvement provoque le scintillement malheureusement.
Voici la partie de mon code où je dessine l'image - Je ne peux pas donner SSCCE je suppose car il y a plus de 15 classes et 5 km de code écrit:
// After a button clicked on panel
SomeButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
// The chart and XYPlot is already drawn at this point
// Reading the image
try {
myPicture = ImageIO
.read(new File("\\\\Users2\\blabla\\Data\\MyPictures\\x.png"));
} catch (IOException e) {
e.printStackTrace();
}
// Setting up a timer
timer2 = new java.util.Timer();
Object source = event.getSource();
if (source == SomeButton) {
// Setting up a task
task2 = new java.util.TimerTask() {
@Override
public void run() {
double x1;
double y1;
try {
// Getting different x and y values from a microcontroller instantaneously
if (microContConnected()) {
x1 = microCont.getX();
y1 = microCont.getY();
// creating the annotation
XYImageAnnotation ImageAnn = new XYImageAnnotation(x1, y1, myPicture);
// Here is the drawing and clearing made !
plot.addAnnotation(ImageAnn);
pause(50);
plot.clearAnnotations();
}
} catch (SerialPortException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
timer2.scheduleAtFixedRate(task2, 50, 50);
}
}
});
Impossible de reproduire. Un [sscce] (http://sscce.org/) devrait être <100 lignes de code. Utilisez une icône 'Shape' ou une icône' UIManager' existante pour votre image et une 'javax.swing.Timer' pour une synchronisation plus facile. – trashgod