案例:详细描述
需求要求定时刷新该折线图,只展示此刻之前的数据,但横坐标要求显示一天0点到23点。
效果图片
图片:
折线图工具类
XyChartFacDemo .java
package xny.hyd.tool;
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.labels.XYItemLabelGenerator;
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.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.XYDataset;
import xny.hyd.entity.ChartData;
import xny.hyd.entity.MaxMinCoordinat;
import xny.tool.NewJComboBox;
/**
* 折线图基类
* 2019年8月28日08:44:47
* @author Administrator
*
*/
public class XyChartFacDemo {
//定义整个界面panel
private JPanel contentPane;
//折线图变量
// private JFreeChart xylineChart = null;
//全部数据
public List<ChartData> date = null;
//当前要展示数据
public List<ChartData> dateNow = null;
//折线图图表
private JFreeChart lineChart;
//数据集
private TimeSeriesCollection dataset;
//每一条折线的最大最小值
public List<MaxMinCoordinat> value;
//是否需要顯示
private boolean isShowX;
//是否要查询条件
private boolean isHaveSelect = false;
//每隔多长时间一个数据点
private int timeinterval = 15;
//已知数据点时间长度,算出一天之内有多少个数据点/一天之内的总数据点个数
private int dataPoint = (24*60)/timeinterval;
//下拉数据
private List<String> selectData = new ArrayList<String>();
private String[] list;
public boolean isHaveSelect() {
return isHaveSelect;
}
public void setHaveSelect(boolean isHaveSelect) {
this.isHaveSelect = isHaveSelect;
}
public int getTimeinterval() {
return timeinterval;
}
public void setTimeinterval(int timeinterval) {
this.timeinterval = timeinterval;
}
public List<String> getSelectData() {
return selectData;
}
public void setSelectData(List<String> selectData) {
this.selectData = selectData;
}
/**
* 构造方法
*/
public XyChartFacDemo() {
this(false);
}
public XyChartFacDemo(boolean isShowX) {
this.isShowX = isShowX;
date = new ArrayList<ChartData>();
dateNow = new ArrayList<ChartData>();
}
public void init() {
if(selectData!=null&&selectData.size()>0) {
list = new String[selectData.size()];
for(int i=0;i<selectData.size();i++) {
list[i]=selectData.get(i);
}
}
}
/**
* 重新查询数据,刷新折线图
*/
public void zxtPushData() {
//查询数据
//数据处理
//刷新折线图
// LineChart push = new LineChart();
}
/**
* Create the frame.
* 获取一个折线图jpanel
*/
public JPanel getChooseshow(List<ChartData> dateList) {
contentPane = new JPanel();
contentPane.setOpaque(false);
contentPane.setLayout(new BorderLayout(0, 0));
getDate(dateList);
//获取折线图
LineChart xy = new LineChart();
ChartPanel charpanal = xy.getCharPanel(createDataset(dateList));
contentPane.add(charpanal,BorderLayout.CENTER);
JPanel top = new JPanel();
top.setLayout(new BorderLayout(0, 0));
top.setOpaque(false);
contentPane.add(top, BorderLayout.NORTH);
//放多选框按钮
JPanel panel_2 = new JPanel();
panel_2.setOpaque(false);
panel_2.setLayout(new BoxLayout(panel_2, BoxLayout.X_AXIS));
top.add(panel_2, BorderLayout.WEST);
if(isHaveSelect) {
top.add(getCz(),BorderLayout.CENTER);
}
//循环添加选择框,并注册响应事件
for (int i = 0; i < dateList.size(); i++) {
JCheckBox checkBox = new JCheckBox(dateList.get(i).getName());
checkBox.setOpaque(false);
checkBox.setForeground(Color.decode(dateList.get(i).getColor()));
checkBox.setFont(new Font("苹方字体", Font.PLAIN, 17));
checkBox.setSelected(true);
checkBox.setName(dateList.get(i).getName());
panel_2.add(checkBox);
//入库流量选择框触发事件
checkBox.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
JCheckBox check = (JCheckBox) e.getSource()<