因为需要使用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();
}
}
分享到:
相关推荐
2. **Java图形编程**:理解如何在Java中使用JFreeChart创建图表,包括数据模型的构建、图表类型的选取、样式设置以及渲染过程。 3. **Servlet和JSP**:Servlet是Java Web应用中处理HTTP请求的核心组件,JSP则用于...
JFreeChart是Java领域中领先的开源图表库,由JFree组织在SourceForge.net上维护和发布。它提供了一系列强大的图表生成功能,适用于多种Java应用程序,包括桌面应用、Applet、Servlet以及JSP网页。JFreeChart的核心...
在Java中使用JFreeChart创建实时曲线图,主要涉及以下几个关键步骤: 1. **创建时间序列(Time Series)**:时间序列是存储随时间变化的数据的一种方式,通常用于时间序列分析和预测。在JFreeChart中,`TimeSeries`...
标题“JFreechart在Linux下不显示及中文乱码问题”指出的是在使用JFreechart库创建图表时,在Linux操作系统环境下遇到的两个主要问题:图表无法正常显示以及中文字符出现乱码。JFreechart是一个Java库,用于生成高...
而通过封装和加强官方示例,开发者可以提高代码的复用性和易用性,使得在实际项目中使用JFreeChart更加高效。在你的项目中,可以参考提供的文件“jfreechart”来查看具体的实现方式,这将有助于你更好地理解和应用...
Java 使用 JFreeChart 创建柱形图是一种常见的数据可视化方法,尤其在数据分析和Web应用程序中。JFreeChart 是一个强大的开源库,它提供了多种图表类型,包括柱形图、饼图、线图等,使得开发者能够方便地将数据转化...
本教程将详细讲解如何在Struts2框架中使用JFreeChart来显示图片。 首先,我们需要了解JFreeChart的基本用法。JFreeChart提供了丰富的API,可以方便地创建和定制图表。以下是一般步骤: 1. **创建图表对象**:例如...
在Java编程环境中,JFreeChart库是一个非常强大的工具,它允许开发者创建各种类型的图表,包括饼形图和柱形图,这些图表广泛应用于数据分析、报表生成以及可视化展示。本实例将详细探讨如何利用JFreeChart在Java项目...
makeLineAndShapeChart 方法用于生成折线图,该方法中使用 JFreeChart 库来生成图表。该方法首先创建了一个 CategoryDataset 对象,然后使用 ChartFactory 工厂类来生成图表。 ### ChartFactory 工厂类 ...
- **JavaFX**:虽然JFreeChart主要针对Swing设计,但通过一些适配器也可以在JavaFX环境中使用。 **5. ** **社区与文档** JFreeChart有一个活跃的社区,官方网站(http://www.jfree.org/jfreechart/index.html)提供...
在JFreeChart中,开发者可以使用`CategoryDataset`来存储数据,然后利用`JFreeChart`类的`createBarChart()`方法创建图表,最后通过`ChartFactory`和`ChartFrame`将图表显示出来。 2. **CreateTimeXYChar.java**:...
`Graphics2D`是Java中的一个类,用于绘制2D图形。 ##### 16.5 开始导出 通过简单的步骤即可将图表导出为PDF。 ##### 16.6 实例应用 通过一个实际的例子来演示如何将图表导出为PDF。 ##### 16.7 查看PDF文件 使用...
此外,还可以导出生成的图表为PDF、SVG、JPEG等多种格式,方便在不同的应用场景中使用。 在实际开发中,JFreeChart与Swing或JavaFX等GUI框架结合,可以构建出强大的数据分析界面。例如,将图表嵌入到JPanel或JFrame...
本实例主要介绍如何使用 JFreeChart 在 Java 应用程序中生成分布图。 首先,我们需要导入 JFreeChart 的相关依赖。在 Maven 项目中,可以在 `pom.xml` 文件中添加以下依赖: ```xml <groupId>org.jfree ...
Java中的报表生成是一个重要的领域,尤其在企业级应用中,数据可视化是不可或缺的一部分。JFreeChart 是一个流行的开源 Java 图表库,它提供了丰富的图表类型,如饼图、柱状图、线图、散点图等,使得开发者可以轻松...
标题“解决jfreechart在Linux下无法显示中文”所涉及的知识点主要集中在Java图形库JFreeChart和在Linux操作系统中的字体配置。JFreeChart是一个强大的Java库,用于创建各种图表,如柱状图、饼图、线图等。在Windows...
在Java中使用JFreeChart,首先需要将其依赖引入到项目中,这通常通过Maven或Gradle等构建工具来完成。之后,开发者可以通过JFreeChart提供的类和方法创建图表对象,设置图表的标题、数据源、颜色、图例等属性,并...
在使用JFreeChart库生成图表时,可能会遇到中文乱码的问题,这主要是因为JFreeChart默认的字体不支持中文显示。解决这个问题的关键在于为图表的各个部分(如标题、轴标签、图例等)设置合适的中文支持字体。下面将...
在"tb_jfreechart_java_swimckz_DEMO_necknho_"中,StaticChartDemo很可能是主示例类,它展示了如何在Android活动中创建并显示静态图表。这个DEMO可能包含以下关键组件: 1. `StaticChartDemo`类:作为主入口,负责...
在这个名为"MyJFreeChart_jfreechart_java_曲线_源码"的压缩包中,我们可以期待找到使用JFreeChart库在Java中绘制曲线图的源代码示例。JFreeChart库是开源的,它提供了丰富的API,使得开发者能够轻松地在Java应用...