您的位置:首页 > 其它

JFreeChart开发:利用JFreeChart开发实时曲线

2013-12-29 12:38 387 查看

/**

* =============================================================

* JFreeChart开发:利用JFreeChart开发实时曲线

* =============================================================

*/

// 导入java2d包

import java.awt.Color;

import java.awt.Component;

import java.awt.Dimension;

import java.awt.Font;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.BorderFactory;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

import org.jfree.chart.ChartFactory;

import org.jfree.chart.ChartPanel;

import org.jfree.chart.JFreeChart;

import org.jfree.chart.axis.ValueAxis;

import org.jfree.chart.plot.PlotOrientation;

import org.jfree.chart.plot.XYPlot;

import org.jfree.chart.title.TextTitle;

import org.jfree.data.time.Millisecond;

import org.jfree.data.time.TimeSeries;

import org.jfree.data.time.TimeSeriesCollection;

import org.jfree.data.xy.XYDataset;

import org.jfree.data.xy.XYSeries;

import org.jfree.data.xy.XYSeriesCollection;

import org.jfree.ui.RefineryUtilities;

public class TimeSeriesDemo1 extends JFrame implements Runnable, ActionListener {

// 时序图数据集

// private TimeSeries timeseries;

private TimeSeries timeseries;

XYSeries s3 = new XYSeries("次序值");

// Value坐标轴初始值

private double lastValue;

static Class class$org$jfree$data$time$Millisecond;

static Thread thread1;



private javax.swing.JPanel jPanel1;

int step = 10;

public static void main(String[] args) {

TimeSeriesDemo1 TimeSeriesDemo1 = new TimeSeriesDemo1();

TimeSeriesDemo1.pack();

RefineryUtilities.centerFrameOnScreen(TimeSeriesDemo1);

TimeSeriesDemo1.setVisible(true);

startThread();

}

public void run() {

while (true) {

try {

// // 根据实际需要在此处加入需要执行的代码

double d = 0.9D + 0.2D * Math.random();

// lastValue = lastValue * d;

// Millisecond millisecond = new Millisecond();

// System.out.println("Now=" + millisecond.toString());

// timeseries.add(millisecond, lastValue);

// Thread.sleep(300);

// 根据实际需要在此处加入需要执行的代码

// double d = 0.9D + 0.2D * Math.random();

lastValue = lastValue * d;

System.out.println("step = "+step+",lastvalue = "+lastValue);

s3.add(step, lastValue);

step+=5;

Thread.sleep(1000);

} catch (InterruptedException e) {

}

}

}

private void initComponents(Component comp) {

jPanel1 = new javax.swing.JPanel();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

setTitle("窗口demo");

setLocationByPlatform(true);

setResizable(false);

jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("panel标题"));

jPanel1.setToolTipText("串口设置");

javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);

jPanel1.setLayout(jPanel1Layout);

jPanel1Layout.setHorizontalGroup(

jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGap(0, 350, Short.MAX_VALUE)

);

jPanel1Layout.setVerticalGroup(

jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGap(0, 180, Short.MAX_VALUE)

);

// jPanel1.add( comp );

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());

getContentPane().setLayout(layout);

layout.setHorizontalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addGap(19, 19, 19)

.addComponent(comp, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)

.addContainerGap(472, Short.MAX_VALUE))

);

layout.setVerticalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addGap(19, 19, 19)

.addComponent(comp, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)

.addContainerGap(117, Short.MAX_VALUE))

);

jPanel1.getAccessibleContext().setAccessibleName("饭店");

pack();

}

public static void startThread() {

thread1.start();

}

public void actionPerformed(ActionEvent e) {

if (e.getActionCommand().equals("EXIT")) {

thread1.interrupt();

System.exit(0);

}

}

public TimeSeriesDemo1() {



// super(new BorderLayout());

thread1 = new Thread(this);

lastValue = 100D;

// 创建时序图对象

timeseries = new TimeSeries(

"Random Data",

TimeSeriesDemo1.class$org$jfree$data$time$Millisecond != null ? TimeSeriesDemo1.class$org$jfree$data$time$Millisecond

: (TimeSeriesDemo1.class$org$jfree$data$time$Millisecond = TimeSeriesDemo1

.getClass("org.jfree.data.time.Millisecond")));

TimeSeriesCollection timeseriescollection = new TimeSeriesCollection(

timeseries);



XYSeriesCollection dataset = new XYSeriesCollection(s3);

dataset.addSeries( s3 );

// 创建图表面板

ChartPanel chartpanel = new ChartPanel(

createChart(dataset));

chartpanel.setPreferredSize(new Dimension(500, 270));

// JPanel jpanel = new JPanel();

// jpanel.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));// 边距为4

// JButton jbutton = new JButton("退出");

// jbutton.setActionCommand("EXIT");

// jbutton.addActionListener(this);

// jpanel.add(jbutton);

// getContentPane().add(chartpanel,"South");

// getContentPane().add(jpanel, "South");

initComponents(chartpanel);

}

private JFreeChart createChart(XYDataset xydataset) {

JFreeChart jfreechart = ChartFactory.createXYLineChart("时序图例子",

"时间", "温度值", xydataset, PlotOrientation.VERTICAL, true, true, false);

XYPlot xyplot = jfreechart.getXYPlot();

// 横纵坐标设定



ValueAxis valueaxis = xyplot.getDomainAxis();

valueaxis.setRange( 1, 300D );

valueaxis.setAutoRange(true);

valueaxis.setFixedAutoRange(300D);

valueaxis = xyplot.getRangeAxis();

valueaxis.setRange(0.0D, 200D);

configFont(jfreechart);

return jfreechart;

}

static Class getClass(String s) {

Class cls = null;

try {

cls = Class.forName(s);

} catch (ClassNotFoundException cnfe) {

throw new NoClassDefFoundError(cnfe.getMessage());

}

return cls;

}



/**

* 配置字体

* @param chart JFreeChart 对象

*/

private void configFont(JFreeChart chart){

// 配置字体

Font xfont = new Font("宋体",Font.PLAIN,12) ;// X轴

Font yfont = new Font("宋体",Font.PLAIN,12) ;// Y轴

Font kfont = new Font("宋体",Font.PLAIN,12) ;// 底部

Font titleFont = new Font("隶书", Font.BOLD , 25) ; // 图片标题

XYPlot plot = chart.getXYPlot();// 图形的绘制结构对象



// 图片标题

chart.setTitle(new TextTitle(chart.getTitle().getText(),titleFont));



// 底部

chart.getLegend().setItemFont(kfont);



// X 轴

ValueAxis domainAxis = plot.getDomainAxis();

domainAxis.setLabelFont(xfont);// 轴标题

domainAxis.setTickLabelFont(xfont);// 轴数值

domainAxis.setTickLabelPaint(Color.BLUE) ; // 字体颜色

// domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45); // 横轴上的label斜显示



// Y 轴

ValueAxis rangeAxis = plot.getRangeAxis();

rangeAxis.setLabelFont(yfont);

rangeAxis.setLabelPaint(Color.BLUE) ; // 字体颜色

rangeAxis.setTickLabelFont(yfont);



}

}


JfreeChart Demo

(其它:赵力仅)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: