我很难在 JFreeChart - XYLineChart 上绘制图像。主要问题是注释的 x 和 y 坐标是实时动态更新的。因此,我的代码添加注释并清除它以绘制新的注释会导致闪烁,这对用户来说很烦人。
我已经检查了一些在 JAVA 上使用 update() 、paint () 或 repaint() 方法使用图形的闪烁问题的示例,但似乎无法在 JFreeChart 上实现。
您是否有任何想法如何摆脱闪烁或解决方法以在 JFreeChart 上使用一个 bufferedImage 而不是注释?
更具体地说,这里是画线和图像:
所以这个十字准线(作为缓冲图像)应该随着 x 和 y 轴的更新值在绘图线上上下移动。但不幸的是,这种运动会导致闪烁。
这是我绘制图像的代码部分 - 我猜我无法提供 SSCCE,因为有超过 15 个类和 5k 的书面代码:
// 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);
}
}
});