在swt的composite上画出基于jfreechart的时序图(timeserial),需要SWT_AWT转换

在设计基于C/S的客户端时,swt通常是首选。但是jfreechart的时序图(timeserial)是基于swing来实现的,要想在swt中的composite上实现,还需要进行SWT_AWT转换。

直接上代码:

1、初始化

<span style="font-size:18px;"><span style="white-space:pre">	</span>compositedyn=new Composite(shell, SWT.EMBEDDED);
	compositedyn.setBounds(29, 57, 884, 513);
	compositedyn.setLayout(new GridLayout(1, false));
	timeseries = new TimeSeries("信号值", Millisecond.class);  
        datasetdyn = new TimeSeriesCollection(timeseries);  
        dynchartPanel = new ChartPanel(createdynChart(datasetdyn));  
        framedyn = SWT_AWT.new_Frame(compositedyn);  //间接的的方法实现
        framedyn.setLayout(new BorderLayout()); 
        framedyn.add(dynchartPanel, BorderLayout.CENTER);</span>
2、创建freechart
<span style="font-size: 24px;"> </span><span style="font-size:18px;">private JFreeChart createdynChart(XYDataset dataset) {  
	        JFreeChart result = ChartFactory.createTimeSeriesChart(ID+"谐波分析", "时间/min",  
	                "电压/V", dataset, true, true, false);  
	        System.out.println(ID);
	        XYPlot plot = (XYPlot) result.getPlot();  
	        ValueAxis axis = plot.getDomainAxis(); //横坐标的文字
	        
	        ValueAxis caxis = plot.getRangeAxis();//纵坐标
	        
	        //axis.setAutoTickUnitSelection(false);
	        TextTitle textTitle = result.getTitle();
	        textTitle.setFont(DEFAULT_TITLE_FONT);
	        caxis.setLabelFont(DEFAULT_TITLE_FONT);
	        axis.setLabelFont(DEFAULT_TITLE_FONT);
	        result.getLegend().setItemFont(DEFAULT_TITLE_FONT);
	        axis.setInverted(true);
	       // axis.setPositiveArrowVisible(true);
	        //axis.setAutoRange(true);  
	        //axis.setVerticalTickLabels(true);
	        axis.setFixedAutoRange(50*60000.0);  //6s*n
	        axis = plot.getRangeAxis();  
	        axis.setRange(0.0, 150.0);  //纵坐标的范围
	        //axis.setVisible(true);
	        return result;  //返回的是图标的格式
	    }</span>

3、在ui界面下另开线程向时序图发数据

<span style="font-size:18px;">
</span><pre name="code" class="java"><span style="font-size:18px;"><strong>new Thread() {
            public void run() {
                // 此处为另外一个单独线程,非UI线程                  
                while(true) {
                    // 非UI线程访问UI
                    display.asyncExec(new Runnable() {
                        @Override
                        public void run() {
                        	double factor = 0.90 + 0.2 * Math.random();  
    	    	            lastValue = lastValue * factor;  
    	    	            Millisecond now = new Millisecond();  
    	    	            timeseries.add(now, lastValue);
                        }
                   });
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e1) {
                        e1.printStackTrace();
                    }
                }
                
            }
        }.start();</strong></span>



                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值