swt动态图表实例

前段时间做了个linux信息采集系统,目的是在windows环境下监测linx主机的资源使用情况以及硬件的健康状况,采集到信息后需要以动态图表的形式显示出来,由于使用的swt的来做的界面,上网收缩后发现相关的资料很少,要么不能用,要么不适合,于是决定写个demo,方便以后使用,希望对有需要的人有所帮助。本demo使用的是jfreechart组件,这个demo是根据官网的demo改的,为了方便使用LinkedHashMap来维护数据,因为这是有序的,而且可以通过重写removeEldestEntry()方法来对数据进行刷新。由于是个demo,所以数据是随机生成的。接下来就上代码吧:

相关jar包下载地址:http://download.csdn.net/detail/q5841818/8854819

将下面这两个类放在同一包下,编译即可运行

import java.util.LinkedHashMap;
import java.util.Map;

import org.jfree.data.time.Second;

public class MyMap extends LinkedHashMap<Second, Integer>{
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    private static final int MAX_ENTRIES = 9;

    protected boolean removeEldestEntry(Map.Entry eldest) {
       return size() > MAX_ENTRIES;
    }
import java.awt.Color;
import java.text.SimpleDateFormat;
import java.util.Random;
import java.util.Map.Entry;

import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.time.Second;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.XYDataset;
import org.jfree.experimental.chart.swt.ChartComposite;
import org.jfree.ui.RectangleInsets;

/**
 * chaonan
 * 动态图表例
 */
public class SWTTimeSeries
{

    private static  TimeSeriesCollection dataset = new TimeSeriesCollection();
    private static MyMap dataMp=new MyMap();
    private static MyMap dataMp1=new MyMap();
    private static  TimeSeries s1 = new TimeSeries("cpu", Second.class);
    private static  TimeSeries s2 = new TimeSeries("Ram", Second.class);

     /**
     * Creates a chart.
     *
     * @param dataset  a dataset.
     *
     * @return A chart.
     */
    private static JFreeChart createChart(XYDataset dataset) {

        JFreeChart chart = ChartFactory.createTimeSeriesChart(
            "resourceuse",  // title
            "time",             // x-axis label
            "use",   // 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.0, 5.0, 5.0, 5.0));
        plot.setDomainCrosshairVisible(true);
        plot.setRangeCrosshairVisible(true);
        plot.getRangeAxis().setUpperBound(100);
        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("mm:ss"));

        return chart;

    }

    /**
     * Creates a dataset, consisting of two series of monthly data.
     *
     * @return The dataset.
     */
    private static XYDataset addToDataset() {//更新数据
        Random r=new Random();//随机数

        dataMp.put(new Second(),20+ r.nextInt(50));
        dataMp1.put(new Second(), 20+ r.nextInt(50));
        //cpuList.add(cpuuse);
        s1.clear();
        s2.clear();
        for(Entry<Second,Integer> e:dataMp.entrySet() ){
            s1.add(e.getKey(),e.getValue());
        }
        for(Entry<Second,Integer> e:dataMp1.entrySet() ){
            s2.add(e.getKey(),e.getValue());
        }

        dataset.removeAllSeries();
        dataset.addSeries(s1);
        dataset.addSeries(s2);

        return dataset;
    }

    /**
     * Starting point for the demonstration application.
     *
     * @param args  ignored.
     */
    public static void main(String[] args) {

        final JFreeChart chart = createChart(dataset);
        final Display display = new Display();
        Shell shlCpu = new Shell(display);
        shlCpu.setSize(655, 487);
        shlCpu.setText("cpu\u4F7F\u7528\u60C5\u51B5");
        shlCpu.setLayout(new FillLayout(SWT.HORIZONTAL));

        SashForm sashForm = new SashForm(shlCpu, SWT.NONE);

        Composite composite = new Composite(sashForm, SWT.NONE);

        Button button = new Button(composite, SWT.NONE);
        button.addSelectionListener(new SelectionAdapter() {

            public void widgetSelected(SelectionEvent e) {
                new Thread(new Runnable() {

                    public void run() {
                        while (true) {
                            try {
                                Thread.sleep(2000);
                            } catch (InterruptedException e) {

                                e.printStackTrace();
                            }
                            Display.getDefault().asyncExec(new Runnable() {

                                public void run() {
//                                  GetLinuxInfo service = new GetLinuxInfoImpl();
//                                  InfoData dataInfo = null;
//                                  try {
////                                        dataInfo = service.getInfo();
//                                  } catch (Exception e) {
//                                      // TODO Auto-generated catch block
//                                      e.printStackTrace();
//                                  }
                                    addToDataset();

                                    //System.out.println(dataInfo.getCpu().getCpuTotalUse());
                                }

                            });

                        }

                    }
                }).start();
            }
        });
        button.setBounds(27, 44, 98, 30);
        button.setText("启动");

        Composite composite_1 = new Composite(sashForm, SWT.NONE);
        composite_1.setLayout(new FillLayout(SWT.HORIZONTAL));
        ChartComposite frame = new ChartComposite(composite_1, SWT.NONE, chart, true);
        frame.setDisplayToolTips(true);
        frame.setHorizontalAxisTrace(false);
        frame.setVerticalAxisTrace(false);
        sashForm.setWeights(new int[] {171, 287});
        shlCpu.open();

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-28 01:46:14

swt动态图表实例的相关文章

使用Visifire+ArcGIS API for Silverlight实现Graphic信息的动态图表显示

原文:使用Visifire+ArcGIS API for Silverlight实现Graphic信息的动态图表显示 首先来看一看实现的效果: PS:原始的程序中更新曲线数据时添加了过渡的效果,具体可查看官网的示例: http://www.visifire.com/silverlight_spline_charts_gallery.php 点击其中的一个例子,然后点击Live Updates,就可看到数据更新时的过渡效果.但是蛋疼的博客园,不知道为什么,我插入了我原始的xap文件,过渡效果却没有

EXCEL 2010学习笔记—— 动态图表

今天梳理一下动态图表的相关内容,做一个简单的整理 关键的操作点: 1.插入动态控制器:开发工具->插入->表单控件 对控件进行修改  右键 设置控件格式->单元格链接 用来作为if 函数里的第一个变量位置 2.定义动态数据区域 利用函数进行调用 if 函数 offset函数  if 函数的三个参数都需F4锁定,因为if()函数的应用是要避免EXCEL表格中位置位置变化带来的值的变化. 3.定义名称:公式->定义名称-引用位置调整 .offset函数- 完成动态区域数据提取 下移n行

动态图表制作——数据透视表+函数

大家都知道Excel的图表功能是简单而又强大的,使用Excel能做出很漂亮的商业图表,但是通常我们只做的图表都是静态的--一个图表只能显示一到二个数据维度的情况. 在Ecxel使用过程中,难免需要根据现有数据,制作可视化更高的更能说明问题的图表,在图表制作时,常规的往往只是利用已有的数据进行,如果一张工作表中,数据繁多,并希望每个数据(字段)都有图表出现,我们遵循常规方法制作n多个图表? 如果需要演示的数据有多组维度,比如不同年份不同部门的费用--,或者纵轴系列过多会导致在图形上观察数据的不便,

动态代理-实例解析

转自http://weixiaolu.iteye.com/blog/1477774 动态代理实例如下所示: package cn.xiaolu; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; /** * 动态代理类使用到了一个接口InvocationHandler和一个代理类Proxy ,这两个类配合使用实现了动态代理的功能.

基于Struts2 Spring ibatis Oracle10g架构 多数据源动态切换实例

一.概述 基于Spring动态配置多数据源,在大型的应用中对数据进行切分,并且采用多个数据库实例进行管理,这样可以有效的提高系统的水平伸缩性,而这样的解决方案就会补同于常见的单一数据实例的方案,这就要程序在运行时根据当时的请求以及系统状态来动态的决定将数据存储在哪个数据库实例中,以及从哪个数据库提取数据. Spring配置多个数据源的方式和具体使用过程,Spring对于多数据源,以数据库表为参照,大体上可以分为两大类情况: 1.表级上的跨数据库,即对于不同的数据库却有不相同的表(表名和表结构完全

jxls实现动态图表

此文章是基于 1. jxls实现基于excel模板的报表 一. 准备工作 1. 点击此下载相关文件,并把文件放到 ims 工程对应的文件夹下 二. 制作excel动态图表模板 1. 安装 excel 2003 ,新建文件,命名为:runRecord.xls 2. 创建两个表格,分别命名为:设备运行记录卡.输出负载 3. 设置 输出负载 表格如下: A3单元格设置为时间格式:h:mm,以便图表的x轴可以按分钟展示 4. 点击   插入-->名称-->定义   创建定义名称如下: 名称: outT

Excel动态图表

动态图表其实一点都不难,真的!先看效果,然后教你一步步实现.这是每个地区经销跟代销的数据.Step 01在开发工具插入表单控件.Step 02将表单控件调整到合适的大小,并设置控件格式.Step 03设置数据源区域和单元格链接,单击确定.数据源区域就是要作为下拉选择的地区,单元格链接就是为了后面写公式引用的一个单元格.Step 04设置完,点击任一地区,比如内蒙,你会发现出现了一个数字,这个数字就代表在原来区域的第几个位置.Step 05复制表头,并输入公式.这样就将数据动态引用过来了.=OFF

利用反射动态创建实例并调用方法

在.Net 中,程序集(Assembly)中保存了元数据(MetaData)信息,因此就可以通过分析元数据来获取程序集中的内容,比如类,方法,属性等,这大大方便了在运行时去动态创建实例. 主要用途: 动态加载DLL,实现插件机制. 实例化DLL中的类型. 执行后期绑定,访问在运行时创建的类型的方法. 首先,新建一个空白解决方案:DllSolution 向解决方案中添加一个类库:RefDll,这将是需要被动态创建的程序集 重命名默认新建的Class1类:Student,这个类将是需要动态创建的类.

Java反射机制可以动态修改实例中final修饰的成员变量吗?

问题:Java反射机制可以动态修改实例中final修饰的成员变量吗? 回答是分两种情况的. 1. 当final修饰的成员变量在定义的时候就初始化了值,那么java反射机制就已经不能动态修改它的值了. 2. 当final修饰的成员变量在定义的时候并没有初始化值的话,那么就还能通过java反射机制来动态修改它的值. 实验: 1. 当final修饰的成员变量在定义的时候就初始化了值 1 public Class Person { 2 private final String name = "damon