当前位置:  首页  >  PHP资讯  >  业界资讯

DragChartPanel可拖拽曲线应用详解

这篇文章主要为大家详细介绍了DragChartPanel可拖拽曲线的应用,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

DragChartPanel  是java cs架构中的一种图形展现的开源组件。

业务需求需要用到DragChartPanel  ,这是一种根据jtable表格中的数据给与展示的图形组件。它和其他图形组件区别再与它可以进行拖拽,用户通过它不仅可以看出数据变化的曲线,而且可以通过拖拽修改表格中的数据。

下面展示一下它的效果图:

丑归丑,但是很实用呀。

下面展示它的代码

初始化坐标格图:

 chartpanel1 = new DragChartPanel(this); chartpanel1.setXtitle("时 间"); chartpanel1.setYtitle("负 荷(MW)"); chartpanel1.setDragLabel(jLabel1); chartpanel1.setTm((DefaultTableModel) jTable1.getModel()); chartpanel1.setStartRow(0); chartpanel1.setChartPanel(jPanel11);

绘制曲线:

 private void drawGraph(int col) { jLabel1.setText(""); int count = jTable1.getRowCount(); String[][] chartData1 = new String[1][count]; String[] chartIndex = new String[count]; DefaultTableModel tm = (DefaultTableModel) jTable1.getModel(); for (int i = 0; i  

这个组件有一个缺点。只支持对列进行修改,这是这个组件的一个特点(拖动曲线表格的列会发生改动)。
为了使用它,很多表的结构就不得不迎合这一缺点。

例如如下表结构:

都是按列展示的。对于有些情况很不合理!如何解决(思考中。。。。。。)

上面思考的问题解决了!!!

源码中有这样一个字段:

再使用的过程中会出现如下情况:

这个时候你get哪个model就无所谓了,为了避免影响,随便弄一样不会发生改变的model吧。

这样,拖动曲线的时候,label的值会实时显示曲线的坐标。

那么,给上面的label 加一个监听,改变值的时候,将label的内容用“:”分割开,不刚好是x轴和y轴的值了吗?

对应横向表格中,直接再label监听事件中就可以更改table的值。(完美!!!)

注意一下:有时拖动x轴的坐标是很详细很详细的数据移动,是因为你选这了setIndex而不是setXLab

 private void initChartline() { //填充 图形 String[][] ChartData = new String[1][24]; String[] ChartIndex = new String[24]; if (fixTable.getRowCount() > 0) { for (int i = 0; i  
 //曲线颜色 private java.awt.Color[] Lcol = { java.awt.Color.red, java.awt.Color.blue, java.awt.Color.blue};

它的源码:

 /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.qctc.view.common.frame.pub; import com.qctc.common.util.period; import com.qctc.common.Constant; import com.qctc.view.common.frame.BaseSubTabModule; import com.qctc.view.common.frame.pub.datasysgraphdrag.datasysgraph; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.Dimension; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.table.DefaultTableModel; /** * * @author Administrator */ public class DragChartPanel { private java.awt.Color[] Lcol = Constant.Lcol; private Color bgcolor = new Color(204, 204, 255);//背景色 private Color rectcolor = Color.white;//图形矩形内颜色 public DragChartPanel(BaseSubTabModule parentModule, Color bgcolor, Color rectcolor) { this.bgcolor = bgcolor; this.rectcolor = rectcolor; this.parentModule = parentModule; initChartPanel(); } public DragChartPanel(BaseSubTabModule parentModule) { this.parentModule = parentModule; initChartPanel(); } public DragChartPanel() { initChartPanel(); } public void initChartPanel() { //设置是否翻页 chart.setMutiPage(false); chart.setConvertBool(true); //设置底色 chart.setBackColor(bgcolor); // chart.setBackColor(new Color(192,192,192)); //设置图形区域的边框颜色 chart.setBorderColor(Color.red); //设置图形区域的底色 // chart.setChartRectColor(new Color(204, 204, 250)); // if(Constant.SYSTEM_AREA.equals("山西")){ chart.setChartRectColor(rectcolor); // chart.setChartRectColor(new Color(74,74,107)); // } //设置xy坐标轴颜色 chart.setXyColor(new Color(30, 30, 30)); //设置标题颜色 chart.setTitleColor(new Color(30, 30, 30)); //设置网格颜色 chart.setGridColor(new Color(50, 180, 180)); //设置是否显示网格 1 显示 其他不显示 chart.setShowHidegrid(1); //设置显示点的大小 // chart.setShowHidep(0); // if (Constant.SYSTEM_AREA.equals("山西")) { chart.setShowHidep(1); // } //鼠标移动曲线上是否自动显示横纵坐标十字线 chart.setshowCrossLine(true); //设置鼠标移动曲线显示的十字线颜色 chart.setCrossLineColor(new Color(150, 180, 150)); //设置曲线类型:0 连续的曲线 3只显示点 chart.setLineType(0); //设置鼠标提示框框边颜色 chart.setLwBorderColor(Color.red); //设置鼠标显示提示框底色 chart.setLwColor(Color.yellow); //设置鼠标显示提示框提示字的颜色 chart.setLwTextColor(Color.white); //设置横竖网格线条数 chart.setXzPoints(9); chart.setYzPoints(10); chartpanel.setLayout(new BorderLayout()); chartpanel.add(getChart(), java.awt.BorderLayout.CENTER); chart.addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(java.awt.event.MouseEvent evt) { dragState = true; } public void mouseReleased(java.awt.event.MouseEvent evt) { dragState = false; } }); } public boolean isDragState() { return dragState; } private boolean dragState = false; protected BaseSubTabModule parentModule; private JPanel chartpanel = new JPanel(); // private datasysgraph chart = new datasysgraph(); //图形参数 private double maxv = -999999999, minv = 999999999; private boolean maxv_zd = true; private boolean minv_zd = true; private String[][] data = null; private String[] ls_linename = null; private String title = ""; private String xtitle = ""; private String ytitle = ""; private int xpoints = 12; private int xmax = 96; private int xmin = 0; private String[] index = null; private int EditColumn = 0;//拖动关联列 private int StartRow = 0;//拖动起始行 private JLabel DragLabel = null;//关联table private DefaultTableModel tm = null;//关联的tm private boolean sftd = true; private int ShowLabelCol = -1; private int[] LineShowLabelCols; public void setSftd(boolean sftd) { this.sftd = sftd; } public void setShowLabelCol(int ShowLabelCol) { this.ShowLabelCol = ShowLabelCol; } public void setLineShowLabelCols(int[] LineShowLabelCols) { this.LineShowLabelCols = LineShowLabelCols; } public void setTm(DefaultTableModel tm) { this.tm = tm; } public void setDragLabel(JLabel DragLabel) { this.DragLabel = DragLabel; } public void setEditColumn(int EditColumn) { this.EditColumn = EditColumn; } public void setStartRow(int StartRow) { this.StartRow = StartRow; } public void setXtitle(String xtitle) { this.xtitle = xtitle; } public void setYtitle(String ytitle) { this.ytitle = ytitle; } public void setIndex(String[] index) { this.index = index; } public void setData(String[][] data) { this.data = data; } public void setLs_linename(String[] ls_linename) { this.ls_linename = ls_linename; } public void setTitle(String title) { this.title = title; } public datasysgraph getChart() { try { createChart(); return chart; } catch (Exception e) { e.printStackTrace(); return null; } } public datasysgraph getChartByColor(Color[] col) { try { createChartByColor(col); return chart; } catch (Exception e) { e.printStackTrace(); return null; } } /** * 设置chart要加入的JPanel * @param panel */ public void setChartPanel(JPanel panel) { Container parent = chartpanel.getParent(); if (parent != null) { parent.removeAll(); } panel.add(chartpanel); panel.setMinimumSize(new Dimension(300, 100)); } private void createChart() { setMaxMin(this.data); setPara(); setDragPara(); setXY(); buildChart(); } private void createChartByColor(Color[] col) { setMaxMin(this.data); setPara(); setDragPara(); setXY(); buildChartByColor(col); } /** * 生成图 */ private void buildChart() { try { if (this.data != null) { int len = this.data.length; for (int i = 0; i  getMaxv()) { this.maxv = maxdd; } } catch (Exception e1) { e1.printStackTrace(); } } } } } } catch (Exception e) { e.printStackTrace(); } if (getMaxv() == -999999999) { this.maxv = 100; } else { if (getMaxv() > 0) { this.maxv = getMaxv() * 1.05; } else { this.maxv = getMaxv() * 0.95; } } } if (this.minv_zd) { this.minv = 999999999; try { if (data != null) { for (int i = 0; i  0) { this.minv = getMinv() * 0.95; } else { this.minv = getMinv() * 1.05; } } } } /** * @return the Lcol */ public java.awt.Color[] getLcol() { return Lcol; } /** * @param Lcol the Lcol to set */ public void setLcol(java.awt.Color[] Lcol) { this.Lcol = Lcol; } /** * @return the maxv */ public double getMaxv() { return maxv; } /** * @param maxv the maxv to set */ public void setMaxv(double maxv) { this.maxv = maxv; this.maxv_zd = false; } /** * @return the minv */ public double getMinv() { return minv; } /** * @param minv the minv to set */ public void setMinv(double minv) { this.minv = minv; this.minv_zd = false; } /** * 返回修改的曲线数据 * 2013-04-08 hwh * @return */ public double[] getGraphDataY() { return chart.getGraphDataY(); } }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

内容推荐:免费高清PNG素材下载
吐了个 "CAO" !
扫码关注 PHP1 官方微信号
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved PHP1.CN 第一PHP社区 版权所有 京ICP备19059560号-4