白日不到處,青春恰自來。
          苔花如米小,亦學牡丹開。
          posts - 4,  comments - 34,  trackbacks - 0

               這段時間一直比較忙,答應幫朋友完善的一個RCP畢業設計,直到這兩天才有時間動手。這個RCP有生成報表的需求,首先想到的是JFreeChart和BIRT的Chart引擎。因為對JFreeChart比較熟悉,就選擇用它做報表。

          ChartView.java創建一個View類,這里JFreeChart報表參考了SWTTimeSeriesDemo,當然之前得首先加入jfreechart-1.0.5.jar、jfreechart-1.0.5-swt.jar和jcommon1.0.9.jar。

          /**
           * 
          @author zyh2k
           *
           
          */

          public class ChartView extends ViewPart {
              
          private ChartComposite frame;

              
          /* (non-Javadoc)
               * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
               
          */

              @Override
              
          public void createPartControl(Composite parent) {
                  
          // TODO Auto-generated method stub

                       
          final JFreeChart chart = createChart(createDataset());
                      
          /*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");
          */

                      frame 
          = new ChartComposite(parent, SWT.NONE, chart, true);
                      FillLayout fillLayout 
          = new FillLayout();
                       fillLayout.type 
          = SWT.VERTICAL;
                      frame.setLayout(fillLayout);
                      frame.setSize(
          600300);
                      
                      frame.setDisplayToolTips(
          true);
                      frame.setHorizontalAxisTrace(
          false);
                      frame.setVerticalAxisTrace(
          false);
                      
          /*shell.open();
                      while (!shell.isDisposed()) {
                          if (!display.readAndDispatch())
                              display.sleep();
                      }
          */


              }

              
              
          /**
               * 用戶退出時,將面板隱藏
               
          */

              
          public void logoff() {
                  
          if (frame != null && !frame.isDisposed())
                      frame.setVisible(
          false);
              }

              
          /**
               * 顯示面板內容
               
          */

              
          public void show() {
                  
          if (frame != null && !frame.isDisposed())
                      frame.setVisible(
          true);
              }


              
          /* (non-Javadoc)
               * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
               
          */

              @Override
              
          public void setFocus() {
                  
          // TODO Auto-generated method stub

              }

              
              
          /**
               * Creates a chart.
               * 
               * 
          @param dataset  a dataset.
               * 
               * 
          @return A chart.
               
          */

              
          private static JFreeChart createChart(XYDataset dataset) {

                  JFreeChart chart 
          = ChartFactory.createTimeSeriesChart(
                      
          "宿舍水電費月報表",  // title
                      "日期",             // x-axis label
                      "費用",   // y-axis label
                      dataset,            // data
                      true,               // create legend?
                      true,               // generate tooltips?
                      false               // generate URLs?
                  );

                  chart.setBackgroundPaint(Color.white);

                  XYPlot plot 
          = (XYPlot) chart.getPlot();
                  plot.setBackgroundPaint(Color.lightGray);
                  plot.setDomainGridlinePaint(Color.white);
                  plot.setRangeGridlinePaint(Color.white);
                  plot.setAxisOffset(
          new RectangleInsets(5.05.05.05.0));
                  plot.setDomainCrosshairVisible(
          true);
                  plot.setRangeCrosshairVisible(
          true);
                  
                  XYItemRenderer r 
          = plot.getRenderer();
                  
          if (r instanceof XYLineAndShapeRenderer) {
                      XYLineAndShapeRenderer renderer 
          = (XYLineAndShapeRenderer) r;
                      renderer.setBaseShapesVisible(
          true);
                      renderer.setBaseShapesFilled(
          true);
                  }

                  
                  DateAxis axis 
          = (DateAxis) plot.getDomainAxis();
                  axis.setDateFormatOverride(
          new SimpleDateFormat("MMM-yyyy"));
                  
                  
          return chart;

              }

              
              
          /**
               * Creates a dataset, consisting of two series of monthly data.
               *
               * 
          @return The dataset.
               
          */

              
          private static XYDataset createDataset() {
                  
                  TimeSeriesCollection dataset 
          = new TimeSeriesCollection();
                  
                  DbOperate db 
          = DwesFactory.getDbOperate();
                  List rooms 
          = db.getRoomAll();
                  List datas 
          = db.getScoreAll();
                  
                  
          for (Iterator iter = rooms.iterator(); iter.hasNext();) {
                      String room 
          = (String) iter.next();
                      TimeSeries roomSeries 
          = new TimeSeries(room, Month.class);
                      
          for (Iterator dataIter = datas.iterator(); dataIter.hasNext();) {
                          Score score 
          = (Score) dataIter.next();
                          
          if(score.getName().equals(room)) {
                              
          int[] dataObj = DateUtils.getNowSingleObject(score.getMonth());
                              roomSeries.add(
          new Month(dataObj[1], dataObj[2]), score.getScore());
                          }

                          
                      }

                      dataset.addSeries(roomSeries);
                  }

                  
                  
          return dataset;
              }


          }

          NavigatorView.java調用ChartView

                          /**
                   * 結點雙擊事件
                   
          */

                  
          private class MyDoubleClickListener implements IDoubleClickListener {
                      
          public void doubleClick(DoubleClickEvent event) {
                          IStructuredSelection sel 
          = (IStructuredSelection) event.getSelection();
                          NavigatorEntry entry 
          = (NavigatorEntry) sel.getFirstElement();
                          
          // 取得IWorkbenchPage            
                          IWorkbenchPage workbenchPage = getViewSite().getPage();
                          
          if(entry.getName().equals("報表輸出")){
                              String viewId 
          = ChartView.class.getName();
                              ChartView view;
                              
          try {
                                  view 
          = (ChartView) workbenchPage.showView(viewId);
                                  view.show();
          //顯示面板內容
                              }
           catch (PartInitException e) {
                                  
          // TODO Auto-generated catch block
                                  e.printStackTrace();
                              }

                              
                          }
           else {
                              IEditorInput editorInput 
          = entry.getEditorInput();
                              String editorID 
          = entry.getEditorId();
                              
          // 如果editorInput或editorID為空則中斷返回
                              if (editorInput == null || editorID == null)
                                  
          return;
                              
          //搜索使用editorInput對象對應的編輯器
                              IEditorPart editor = workbenchPage.findEditor(editorInput);
                              
          // 如果此編輯器已經存在,則將它設為當前編輯器,否則重新打開一個編輯器。
                              if (editor != null{
                                  workbenchPage.bringToTop(editor);
                              }
           else {
                                  
          try {
                                      editor 
          = workbenchPage.openEditor(editorInput, editorID);
                                  }
           catch (PartInitException e2) {
                                      e2.printStackTrace();
                                  }

                              }

                          }

                      }

                  }



          plugin.xml

           <!-- 加入視圖 -->
             
          <view
                      
          name="報表視圖"
                      icon
          ="icons/project.gif"
                      category
          ="cn.com.wen.dwes.view"
                      class
          ="cn.com.wen.dwes.archive.ChartView"
                      id
          ="cn.com.wen.dwes.archive.ChartView">
                
          </view>
             
          </extension>


          MANIFEST.MF加入引用的包

          Bundle-ClassPath: dwes.jar,
           lib/mysql-connector-java-
          5.0.3-bin.jar,
           lib/jcommon-
          1.0.9.jar,
           lib/jfreechart-
          1.0.5.jar,
           lib/jfreechart-
          1.0.5-swt.jar

          運行的效果


          運行時把鼠標可以報表上左右拖動或選擇一個區域放大,有點像BIRO報表的向下鉆取。由于SWT的JFreeChart目前還是experimental,想把它運用在商業化項目的朋友慎重考慮。
          posted on 2007-06-07 10:03 凍僵的魚 閱讀(3204) 評論(1)  編輯  收藏

          FeedBack:
          # re: 在Eclipse RCP中使用JFreeChart報表
          2008-05-09 17:35 | jll
          能不能給我JreeChart的包?最好附上安裝步驟.謝謝!我自己下了一個,但好像不起作用.我的郵箱是jianglili29@126.com  回復  更多評論
            

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          <2007年6月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          1234567

          常用鏈接

          留言簿(3)

          隨筆檔案(4)

          相冊

          搜索

          •  

          積分與排名

          • 積分 - 14086
          • 排名 - 2061

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 高平市| 江安县| 双鸭山市| 勐海县| 邓州市| 顺平县| 临湘市| 抚远县| 定日县| 陵川县| 新营市| 新昌县| 武定县| 会理县| 玉树县| 长治县| 丹巴县| 芦山县| 大悟县| 老河口市| 扶风县| 珠海市| 峡江县| 通州市| 龙胜| 忻城县| 元谋县| 林甸县| 东光县| 略阳县| 铜山县| 罗甸县| 容城县| 上高县| 宽城| 兴化市| 慈利县| 湟中县| 榆树市| 河南省| 盐亭县|