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的问题,真是好笑,生活的乐趣在于一个接着一个的惊喜,你永远不知道下一秒会发生什么,如果知道了还有什么意思呢。

    每多学一点知识,就少写一行代码。
  • 相关阅读:
    【NOIP】提高组2015 运输计划
    【BZOJ】1635: [Usaco2007 Jan]Tallest Cow 最高的牛
    【51nod】1766 树上的最远点对
    【BZOJ】2054: 疯狂的馒头
    【SRM20】数学场
    【Luogu】P3930 SAC E#1
    【Luogu】P3927 SAC E#1
    【Luogu】 P3928 SAC E#1
    【Codeforces】868C. Qualification Rounds
    【CodeForces】866D. Buy Low Sell High
  • 原文地址:https://www.cnblogs.com/guanmu/p/4174823.html
Copyright © 2011-2022 走看看