Java Swing-JFreeChart应用程序运行缓慢
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java Swing-JFreeChart应用程序运行缓慢,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3474字,纯文字阅读大概需要5分钟。
内容图文
![Java Swing-JFreeChart应用程序运行缓慢](/upload/InfoBanner/zyjiaocheng/694/040a75c087944cb389aefb96b93053af.jpg)
我创建了JFreeChart程序,该程序可以:
>花键的移动点
>不允许越过黑色样条线(边界样条线)
>实时创建新样条线(作为Grapher)
>鼠标滚轮缩放
要将新系列添加到数据集,请使用以下函数:
public static XYSeriesCollection createSplineDataset(File[] polFiles) {
dataset = new XYSeriesCollection();
for (File polFile : polFiles) {
XYSeries series = new XYSeries(polFile.getName());
Scanner s = null;
try {
s = new Scanner(new File(polFile.getAbsolutePath()));
}catch (FileNotFoundException ex) {
System.out.println("Scanner error!");
}
s.useLocale(Locale.US);
while (s.hasNext()) {
float x = s.nextFloat();
float y = s.nextFloat();
series.add(x, y);
}
dataset.addSeries(series);
}
return dataset;
}
主程序(有500个代码字符串,因此是其中的一部分):
public class SplineDemo {
// declaration of variables
private static void display(){
final File[] polFiles = new File("FORPLOT").listFiles();
polFiles[0] = new File("FORPLOT/InitPolin1");
polFiles[1] = new File("FORPLOT/InitPolin0");
for (int i = 2; i <= 36; i++)
polFiles[i] = new File("FORPLOT/P"+(i-2));
dataset = JFunc.createSplineDataset(polFiles); // create dataset
// --------some code-----------
NumberAxis domain = new NumberAxis("\u03C1");
NumberAxis range = new NumberAxis("g(\u03C1)");
SplineRenderer r = new SplineRenderer(20);
xyplot = new XYPlot(dataset, domain, range, r);
final XYLineAndShapeRenderer render = (XYLineAndShapeRenderer) xyplot.getRenderer();
render.setBaseShapesVisible(true);
final JFreeChart chart = new JFreeChart(xyplot);
// --------some code-----------
chartPanel = new ChartPanel(chart){
@Override
public Dimension getPreferredSize() {
return new Dimension(640, 480);
}
};
chart.removeLegend();
chartPanel.addMouseListener(new MouseListener() {
//------ for creating new splines and to move points of splines ---------
});
chartPanel.addMouseWheelListener(new MouseWheelListener() {
//--------- zoom ------------
});
chartPanel.addMouseMotionListener(new MotionListener());
chartPanel.addChartMouseListener(new ChartMouseListener() {
//------ for creating new splines and to move points of splines ---------
});
chartPanel.setDomainZoomable(false);
chartPanel.setRangeZoomable(false);
chartPanel.setPopupMenu(null);
frame = new JFrame(Title);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(chartPanel);
//------ buttons -------
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.addComponentListener(new ComponentListener() {
@Override
public void componentResized(ComponentEvent ce) {
// ---- to move points when window was resized
}
});
}
public static class MotionListener implements MouseMotionListener {
//------ to move points -----------
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
display();
}
});
}
}
因此,@ trashgod建议here修改useBuffer,但对我没有帮助.
所以,我的问题是,当同时绘制1-5个样条曲线时,理想情况下一切正常.当它们变为超过30个样条线时(如屏幕截图所示),工作速度将降低(例如,在移动时,点不在鼠标后面,缩放效果变慢等).问题可以包括什么?这里是YourKit的报告,但我不理解.慢慢地,所有图表的新绘制还是有效?
我不明白30幅图已经可以如此制动了.如果是100会怎样?如果有必要,我可以在zip归档文件中删除完整的代码和项目
解决方法:
XYSplineRenderer“将数据点与自然三次样条连接起来”.毫不意外,它的性能可扩展数千点.如果目标是渲染平滑的数据,则建议在background中执行interpolation,如建议的here,并还原为父XYLineAndShapeRenderer仅用于渲染,这可能是有利的.
此外,每条都有数百个点的数十条曲线可能很难在视觉上区分开.考虑控制相关系列的可见性,此example中的显示使用JCheckBox切换单个系列的显示.
内容总结
以上是互联网集市为您收集整理的Java Swing-JFreeChart应用程序运行缓慢全部内容,希望文章能够帮你解决Java Swing-JFreeChart应用程序运行缓慢所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。