zoukankan      html  css  js  c++  java
  • SWT_AWT加载JFreeChart在Window8下显示不出JFreeChart的问题

      今天终于把Window8上显示JFreeChart的问题解决了,需求是在SWT中使用JFreeChart,但JFreeChart要使用AWT的样式,不能使用SWT的样式(ChartComposite),即要使用SWT_AWT桥接来实现SWT中显示JFreeChart。

      桥接的方式实现的JFreeChart在Win7上没问题,能直接显示出来,但是在Window 8上第一次加载要很长时间,而且显示不出JFreeChart。使用JFreeChart的swt例子的代码改进改成SWt_AWT测试也是同样问题,main方法中代码如下:

      fianel JFreeChart chart = ChartFactory.createTimeSeriesChart(
        "Legal & General Unit Trust Prices", // title
        "Date", // x-axis label
        "Price Per Unit", // y-axis label
        dataset, // data
        true, // create legend?
        true, // generate tooltips?
        false // generate URLs?
      );

      final Display display = new Display();

      Shell shell = new Shell(display);
      shell.setSize(600, 300);
      shell.setLayout(new FillLayout());
      shell.setText("Time series demo for jfreechart running with SWT");

      Composite comp = new Composite(shell, SWT.EMBEDDED);//SWT.EMBEDDED必须
      java.awt.Frame frame = SWT_AWT.new_Frame(comp);

      ChartPanel chartPanel = new ChartPanel(chart);
      frame.add(chartPanel);

      shell.open()
      while (!shell.isDisposed()) {
        if (!display.readAndDispatch())
          display.sleep();
      }

    这样写Window8第一次打开会很卡,具体原因不知道,之后点击下界面JFreeChart会出现。花了一个星期的时间来看这个问题,想过以下方法:

    1、通过给comp加CtrolEvent事件监听,然后模拟AWT的MosueEvent发给ChartPanel,来实现模拟点击,发现不是每次都有效。

    2、先打开SWt的窗口,在窗口打开后向frame中添加chartPanel,在frame和chartPanel中间加一个JPanel,该方法在打开的时候能正常显示,窗口最大化时,如果JPanel没有添加布局没问题,添加了布局导致chartPanel会在最大化过程中刷新,就会出现JFreeChart不显示的情况。

    最后都没招到好的方法,看了下往上说的加载JFreeChart有时确实会很卡,把ChartPanel的userBuffered标记设为false,就能快点。试了下没想到真的有用。修改代码如下:

       ChartPanel chartPanel = new ChartPanel(chart,false);

    这个问题看了三天都没解决出来,今天都不想解决了,随便看了下网上相关的文章,试了下就解决了,哎,想起那句话“没多学一点知识,就少写一行代码”。花了那么多时间,最后仅仅是一个false的问题,真是好笑,生活的乐趣在于一个接着一个的惊喜,你永远不知道下一秒会发生什么,如果知道了还有什么意思呢。

    每多学一点知识,就少写一行代码。
  • 相关阅读:
    洛谷P5661 公交换乘(二分)
    洛谷P4047 [JSOI2010]部落划分(最小生成树)
    洛谷P2872 [USACO07DEC]Building Roads S(最小生成树)
    卸载重装VirtualBox回滚报错
    POJ1151 Atlantis(扫描线+线段树+离散化)
    QT入门-信号槽拓展
    Vue模板语法与常用指令总结
    Vue 生命周期
    querySelector和getElementById方法的区别
    ES6 Class(类)的继承与常用方法
  • 原文地址:https://www.cnblogs.com/guanmu/p/4174823.html
Copyright © 2011-2022 走看看