java swing速度_Java Swing-JFreeChart应用程序运行缓慢

这篇博客讨论了一个使用Java Swing和JFreeChart创建的实时图形应用程序,该程序允许动态添加和移动样条线。随着样条线数量增加到30以上,程序性能显著下降,导致点移动延迟和缩放效果变慢。博主分享了部分代码,并寻求解决方案来优化大量样条线的绘制性能。
摘要由CSDN通过智能技术生成

我创建了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("ρ");

NumberAxis range = new NumberAxis("g(ρ)");

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归档文件中删除完整的代码和项目

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值