`
to_zoe_yang
  • 浏览: 143238 次
  • 性别: Icon_minigender_2
  • 来自: 01
社区版块
存档分类
最新评论

使用JFreeChart显示 Java 虚拟机中的空闲内存量

    博客分类:
  • GUI
阅读更多
因为需要使用JFreeChart动态显示出采集的数据,就看了这方面的资料!根据给出的例子,改了下啊,实时显示出内存大小!


import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Ellipse2D;
import java.sql.Timestamp;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.DateTickUnit;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.NumberTickUnit;
import org.jfree.chart.labels.StandardXYToolTipGenerator;
import org.jfree.chart.plot.Marker;
import org.jfree.chart.plot.ValueMarker;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.time.Day;
import org.jfree.data.time.Hour;
import org.jfree.data.time.Minute;
import org.jfree.data.time.Second;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.ui.RectangleAnchor;
import org.jfree.ui.TextAnchor;

public class MyMemoryChart extends JPanel {
	private static final long serialVersionUID = 1L;
	private TimeSeriesCollection dataCollection = null;
	private TimeSeries series = null;
	private JFreeChart chart = null;
	private XYPlot plot = null;
	private ChartPanel chartPanel = null;


	private int seconds_interval_of_X_axis = 30;
	private int tickUnit_second_Count = 1;
	private Marker vMarker = null;
	private Marker hMarker = null;

	public MyMemoryChart() {
		series = new TimeSeries("");
		series.setMaximumItemCount(100);
		dataCollection = new TimeSeriesCollection(series);
		createChart(dataCollection);
		chartPanel = new ChartPanel(chart);
		this.setLayout(new BorderLayout());
		this.add(chartPanel, BorderLayout.CENTER);
	}

	private void createChart(TimeSeriesCollection dataCollection) {
		chart = ChartFactory.createTimeSeriesChart("", "", "", dataCollection,
				false, // 是否显示图例(对于简单的柱状图必须是false)
				true, // 是否生成工具
				false // 是否生成URL链接
				);
		chart.getTitle().setFont(new Font("Dialog", Font.PLAIN, 10));
		chart.setTitle("No Data");
		plot = chart.getXYPlot();

		// 设置X轴特性
		DateAxis domainAxis = new DateAxis();
		GregorianCalendar gc = new GregorianCalendar();
		GregorianCalendar gc1 = gc;

		int year = gc.get(Calendar.YEAR);
		int month = gc.get(Calendar.MONTH);
		int day = gc.get(Calendar.DATE);
		int hour = gc.get(Calendar.HOUR_OF_DAY);
		int miniute = gc.get(Calendar.MINUTE);
		int second = gc.get(Calendar.SECOND);

		gc = new java.util.GregorianCalendar(year, month, day, hour, miniute,
				second + 10);
		second = second - seconds_interval_of_X_axis;
		gc1 = new java.util.GregorianCalendar(year, month, day, hour, miniute,
				second);
		domainAxis.setTickLabelFont(new Font("Dialog", Font.PLAIN, 10));

		domainAxis.setRange(gc1.getTime(), gc.getTime());
		domainAxis.setAutoRange(false);
		domainAxis.setTickUnit(new DateTickUnit(DateTickUnit.SECOND,
				tickUnit_second_Count, new SimpleDateFormat("mm:ss")));
		plot.setDomainAxis(domainAxis);

		// 1. 设置Y轴特性
		NumberAxis vValueAxis = (NumberAxis) plot.getRangeAxis();
		vValueAxis.setTickLabelFont(new Font("Dialog", Font.PLAIN, 10));
		vValueAxis.setAutoTickUnitSelection(false);

		NumberTickUnit nt = new NumberTickUnit(0.2d); // 设置刻度
		vValueAxis.setTickUnit(nt);
		vValueAxis.setUpperBound(1); // 设置Y轴最大值
		vValueAxis.setLowerBound(0); // 设置Y轴最小值

	}

	// 初始化图表的相关配置
	public void setGraphNameAndInit(String name) {
		chart.setTitle(name);

		// 1. 设置Y轴特性
		NumberAxis vValueAxis = (NumberAxis) plot.getRangeAxis();
		vValueAxis.setTickLabelFont(new Font("Dialog", Font.PLAIN, 10));
		vValueAxis.setAutoTickUnitSelection(false);

		double maxValue = Runtime.getRuntime().totalMemory();
		double minValue = 32;
		NumberTickUnit nt = new NumberTickUnit((maxValue - minValue) / 10.0); // 设置刻度
		vValueAxis.setTickUnit(nt);

		// 1. 设置Y轴特性

		vValueAxis = (NumberAxis) plot.getRangeAxis();
		vValueAxis.setTickLabelFont(new Font("Dialog", Font.PLAIN, 10));
		vValueAxis.setAutoTickUnitSelection(false);
		vValueAxis.setUpperBound(maxValue); // 设置Y轴最大值
		// vValueAxis.setLowerBound(minValue); // 设置Y轴最小值

		// 2. 设置曲线颜色
		XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
		renderer.setSeriesShapesVisible(0, true);
		renderer.setSeriesPaint(0, Color.BLUE);
		renderer.setSeriesShape(0,
				new Ellipse2D.Float(-3.0f, -3.0f, 6.0f, 6.0f)); // circle
		plot.setRenderer(renderer);

		// 3. 设置点击出现数据点值的提示信息
		plot.setDomainCrosshairVisible(true);
		plot.setRangeCrosshairVisible(true);
		plot.getRenderer().setSeriesToolTipGenerator(
				0,
				new StandardXYToolTipGenerator("({1}, {2})",
						new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"),
						new DecimalFormat("#,##0.00")));
		chartPanel.validate();
	}

	public void showingSeries(Timestamp ts, String pvType, String fieldName,
			long fieldValue) {

		GregorianCalendar gc = DateUtil.getGregorianCalendarFrameTimestap(ts);

		int year = gc.get(Calendar.YEAR);
		int month = gc.get(Calendar.MONTH);
		int day = gc.get(Calendar.DATE);
		int hour = gc.get(Calendar.HOUR_OF_DAY);
		int miniute = gc.get(Calendar.MINUTE);
		int second = gc.get(Calendar.SECOND);

		final Hour h = new Hour(hour, new Day(day, month + 1, year));
		series.addOrUpdate(new Second(second, new Minute(miniute, h)),
				fieldValue);

		DateAxis domainAxis = (DateAxis) plot.getDomainAxis();

		// 设置X轴最大值
		gc = new java.util.GregorianCalendar(year, month, day, hour, miniute,
				second + 10);
		domainAxis.setMaximumDate(new Date(gc.getTimeInMillis()));

		// 设置X轴最小值, 最大值和最小值之间的距离为minutes_interval_of_X_axis分钟
		gc.add(Calendar.SECOND, -seconds_interval_of_X_axis);

		domainAxis.setMinimumDate(new Date(gc.getTimeInMillis()));
	}

	public static void main(String[] args) {
		JFrame f = new JFrame();
		MyMemoryChart chart = new MyMemoryChart();
		chart.setGraphNameAndInit("Memory");
		(chart.new DataGenerator(1000)).start();
		f.add(chart);
		f.setSize(400, 500);
		f.setVisible(true);
//		for (int i = 0; i < 100; i++) {
//			GregorianCalendar gc = new GregorianCalendar();
//			Timestamp ts = DateUtil.getTimestampFromGregorianCalendar(gc);
//			chart.showingSeries(ts, "", "", getFreeMemory());
//		}
	}

	class DataGenerator extends Timer implements ActionListener {
		public void actionPerformed(ActionEvent actionevent) {
			GregorianCalendar gc = new GregorianCalendar();
			Timestamp ts = DateUtil.getTimestampFromGregorianCalendar(gc);
			
			long l = Runtime.getRuntime().freeMemory();
			long l1 = Runtime.getRuntime().totalMemory();
			long value = getFreeMemory();
			System.out.println("Value:"+value);
			showingSeries(ts, "", "", value);
		}
		DataGenerator(int i) {
			super(i, null);
			addActionListener(this);
		}
	}

	private static long getFreeMemory() {
		return Runtime.getRuntime().freeMemory();
	}
}
分享到:
评论
1 楼 houxinbin 2012-05-08  
DateUtil.getTimestampFromGregorianCalendar(gc);
DataUtil这个类没有

相关推荐

    利用JFreeChart实现Java中饼状图、柱状图等图表并在Jsp中显示

    2. **Java图形编程**:理解如何在Java中使用JFreeChart创建图表,包括数据模型的构建、图表类型的选取、样式设置以及渲染过程。 3. **Servlet和JSP**:Servlet是Java Web应用中处理HTTP请求的核心组件,JSP则用于...

    JFreeChart示例 JAVA_JFreeChart的应用 JFreeChart 教程

    JFreeChart是Java领域中领先的开源图表库,由JFree组织在SourceForge.net上维护和发布。它提供了一系列强大的图表生成功能,适用于多种Java应用程序,包括桌面应用、Applet、Servlet以及JSP网页。JFreeChart的核心...

    java中关于JFreeChart实现实时曲线图

    在Java中使用JFreeChart创建实时曲线图,主要涉及以下几个关键步骤: 1. **创建时间序列(Time Series)**:时间序列是存储随时间变化的数据的一种方式,通常用于时间序列分析和预测。在JFreeChart中,`TimeSeries`...

    JFreechart 在linux下不显示及中文乱码问题

    标题“JFreechart在Linux下不显示及中文乱码问题”指出的是在使用JFreechart库创建图表时,在Linux操作系统环境下遇到的两个主要问题:图表无法正常显示以及中文字符出现乱码。JFreechart是一个Java库,用于生成高...

    jfreechart-1.0.13中文乱码,数值显示等问题

    而通过封装和加强官方示例,开发者可以提高代码的复用性和易用性,使得在实际项目中使用JFreeChart更加高效。在你的项目中,可以参考提供的文件“jfreechart”来查看具体的实现方式,这将有助于你更好地理解和应用...

    java使用JFreeChart制作柱形图

    Java 使用 JFreeChart 创建柱形图是一种常见的数据可视化方法,尤其在数据分析和Web应用程序中。JFreeChart 是一个强大的开源库,它提供了多种图表类型,包括柱形图、饼图、线图等,使得开发者能够方便地将数据转化...

    使用jfreechart显示图片,具体的

    本教程将详细讲解如何在Struts2框架中使用JFreeChart来显示图片。 首先,我们需要了解JFreeChart的基本用法。JFreeChart提供了丰富的API,可以方便地创建和定制图表。以下是一般步骤: 1. **创建图表对象**:例如...

    饼形图、柱形图实例 jfreechart (Java)

    在Java编程环境中,JFreeChart库是一个非常强大的工具,它允许开发者创建各种类型的图表,包括饼形图和柱形图,这些图表广泛应用于数据分析、报表生成以及可视化展示。本实例将详细探讨如何利用JFreeChart在Java项目...

    java利用jfreechart绘制excel.pdf

    makeLineAndShapeChart 方法用于生成折线图,该方法中使用 JFreeChart 库来生成图表。该方法首先创建了一个 CategoryDataset 对象,然后使用 ChartFactory 工厂类来生成图表。 ### ChartFactory 工厂类 ...

    JFreeChart,Java开源图表框架

    - **JavaFX**:虽然JFreeChart主要针对Swing设计,但通过一些适配器也可以在JavaFX环境中使用。 **5. ** **社区与文档** JFreeChart有一个活跃的社区,官方网站(http://www.jfree.org/jfreechart/index.html)提供...

    java里用JFreeChart画柱状图、折线图、雷达图

    在JFreeChart中,开发者可以使用`CategoryDataset`来存储数据,然后利用`JFreeChart`类的`createBarChart()`方法创建图表,最后通过`ChartFactory`和`ChartFrame`将图表显示出来。 2. **CreateTimeXYChar.java**:...

    java报表jfreechart开发

    `Graphics2D`是Java中的一个类,用于绘制2D图形。 ##### 16.5 开始导出 通过简单的步骤即可将图表导出为PDF。 ##### 16.6 实例应用 通过一个实际的例子来演示如何将图表导出为PDF。 ##### 16.7 查看PDF文件 使用...

    java生成报表JFreeChart

    此外,还可以导出生成的图表为PDF、SVG、JPEG等多种格式,方便在不同的应用场景中使用。 在实际开发中,JFreeChart与Swing或JavaFX等GUI框架结合,可以构建出强大的数据分析界面。例如,将图表嵌入到JPanel或JFrame...

    jfreechart实例 java生成分布图

    本实例主要介绍如何使用 JFreeChart 在 Java 应用程序中生成分布图。 首先,我们需要导入 JFreeChart 的相关依赖。在 Maven 项目中,可以在 `pom.xml` 文件中添加以下依赖: ```xml &lt;groupId&gt;org.jfree ...

    java中的报表(jfreeChart原创)

    Java中的报表生成是一个重要的领域,尤其在企业级应用中,数据可视化是不可或缺的一部分。JFreeChart 是一个流行的开源 Java 图表库,它提供了丰富的图表类型,如饼图、柱状图、线图、散点图等,使得开发者可以轻松...

    解决jfreechart在linux下无法显示中文

    标题“解决jfreechart在Linux下无法显示中文”所涉及的知识点主要集中在Java图形库JFreeChart和在Linux操作系统中的字体配置。JFreeChart是一个强大的Java库,用于创建各种图表,如柱状图、饼图、线图等。在Windows...

    JFreeChartDemo java图形报表

    在Java中使用JFreeChart,首先需要将其依赖引入到项目中,这通常通过Maven或Gradle等构建工具来完成。之后,开发者可以通过JFreeChart提供的类和方法创建图表对象,设置图表的标题、数据源、颜色、图例等属性,并...

    jfreechart中文乱码问题解决方案

    在使用JFreeChart库生成图表时,可能会遇到中文乱码的问题,这主要是因为JFreeChart默认的字体不支持中文显示。解决这个问题的关键在于为图表的各个部分(如标题、轴标签、图例等)设置合适的中文支持字体。下面将...

    tb_jfreechart_java_swimckz_DEMO_necknho_

    在"tb_jfreechart_java_swimckz_DEMO_necknho_"中,StaticChartDemo很可能是主示例类,它展示了如何在Android活动中创建并显示静态图表。这个DEMO可能包含以下关键组件: 1. `StaticChartDemo`类:作为主入口,负责...

    MyJFreeChart_jfreechart_java_曲线_源码

    在这个名为"MyJFreeChart_jfreechart_java_曲线_源码"的压缩包中,我们可以期待找到使用JFreeChart库在Java中绘制曲线图的源代码示例。JFreeChart库是开源的,它提供了丰富的API,使得开发者能够轻松地在Java应用...

Global site tag (gtag.js) - Google Analytics