swing绘制折线图

本文介绍了一个使用Swing和JFreeChart库创建的实时刷新折线图案例。该图根据需求只显示当前时刻之前的数据,横坐标覆盖0点到23点整点。文章提供了折线图工具类、重绘下拉选择框的实现以及测试类、数据类和实体类的代码示例,展示了如何根据数据变化动态更新折线图,包括图例和最大最小值的显示功能。
摘要由CSDN通过智能技术生成

swing开发数据变化折线图(显示0时到当前时间的)

案例:详细描述

需求要求定时刷新该折线图,只展示此刻之前的数据,但横坐标要求显示一天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()<
  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
可以使用以下步骤来使用Java Swing和Echarts绘制折线图: 1. 首先,需要下载Echarts的Java API包,并将其添加到你的项目中。 2. 创建一个JFrame对象,用于显示折线图。 3. 在JFrame中添加一个JPanel对象,用于容纳折线图。 4. 创建一个Echarts对象,并设置其样式和数据。例如: ```java Echarts echarts = new Echarts(); echarts.setOption("{title: {text: '折线图'},tooltip: {trigger: 'axis'}, legend: {data:['销量']}, xAxis: {data: ['Mon','Tue','Wed','Thu','Fri','Sat','Sun']}, yAxis: {type: 'value'}, series: [{name: '销量', type: 'line', data: [120, 132, 101, 134, 90, 230, 210]}]}"); ``` 5. 将Echarts对象添加到JPanel中。例如: ```java JPanel panel = new JPanel(); panel.setLayout(new BorderLayout()); panel.add(echarts, BorderLayout.CENTER); ``` 6. 将JPanel添加到JFrame中,并设置JFrame的大小和可见性。例如: ```java frame.add(panel); frame.setSize(800, 600); frame.setVisible(true); ``` 完整的代码示例: ```java import java.awt.BorderLayout; import javax.swing.JFrame; import javax.swing.JPanel; import com.github.abel533.echarts.ECharts; public class LineChart { public static void main(String[] args) { JFrame frame = new JFrame("折线图"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel panel = new JPanel(); panel.setLayout(new BorderLayout()); Echarts echarts = new Echarts(); echarts.setOption("{title: {text: '折线图'},tooltip: {trigger: 'axis'}, legend: {data:['销量']}, xAxis: {data: ['Mon','Tue','Wed','Thu','Fri','Sat','Sun']}, yAxis: {type: 'value'}, series: [{name: '销量', type: 'line', data: [120, 132, 101, 134, 90, 230, 210]}]}"); panel.add(echarts, BorderLayout.CENTER); frame.add(panel); frame.setSize(800, 600); frame.setVisible(true); } } ``` 注意:在运行代码之前,请确保你已经添加了Echarts的Java API包到你的项目中。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值