DragChartPanel可拖拽曲线应用详解

网友投稿 372 2022-12-18


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 < tm.getRowCount(); i++) {

chartIndex[i] = tm.getValueAt(i, 0) == null ? "" : tm.getValueAt(i, 0).toString();

chartData1[0][i] = tm.getValueAt(i, col) == null ? "" : tm.getValueAt(i, col).toString();

}

if (chartpanel1 != null) {

chartpanel1.setEditColumn(http://col);

chartpanel1.setData(chartData1);

chartpanel1.setXLab(chartIndex);

chartpanel1.setTitle(tm.getColumnName(col));

chartpanel1.setLs_linename(new String[]{tm.getColumnName(col)});

chartpanel1.getChart();

}

}

这个组件有一个缺点。只支持对列进行修改,这是这个组件的一个特点(拖动曲线表格的列会发生改动)。

为了使用它,很多表的结构就不得不迎合这一缺点。

例如如下表结构:

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

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

源码中有这样一个字段:

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

这个时候你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 < dataTable.getColumnCount() - 2; i++) {

ChartIndex[i] = String.valueOf(i);

ChartData[0][i] = dataTable.getValueAt(fixtable_sld, i) == null ? "" : dataTable.getValueAt(fixtable_sld, i).toString();

}

if (dchartpanel_1 != null) {

//String pdate = (String) fixTable.getValueAt(fixTable.getSelectedRow(), 3);

dchartpanel_1.setLs_linename(new String[]{"联络线曲线" + "ceshi1" + "(MW)"});

dchartpanel_1.setLcol(Lcol);

dchartpanel_1.setXLab(ChartIndex);//setXLab 和setIndex的区别在于,setXLab拖动取值x轴是按照下标取值的,而setIndex则是拖动的位置,常常不是整数,推荐用前者

dchartpanel_1.setData(ChartData);

//dchartpanel_1.setIndex(ChartIndex);

dchartpanel_1.getChart();

}

}

}

//曲线颜色

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 < len; i++) {

chart.AddItem(ls_linename[i], data[i].length,

this.Lcol[i]);

chart.setPointValue(ls_linename[i], this.index, this.data[i]);

}

chart.refresh();

}

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 生成图

*/

private void buildChartByColor(Color[] col) {

try {

if (this.data != null) {

int len = this.data.length;

for (int i = 0; i < len; i++) {

chart.AddItem(ls_linename[i], data[i].length,

col[i]);

chart.setPointValue(ls_linename[i], this.index, this.data[i]);

}

chart.refresh();

}

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 设置参数

*/

private void setPara() {

try {

chart.ClearAll();

chart.setTitle(this.title);

chart.setLtitlex(this.xtitle);

chart.setLtitley(this.ytitle);

chart.setMutiPage(false);

chart.setYbzzb(this.getMaxv(), this.getMinv());

chart.setShowLabelCol(ShowLabelCol);

chart.setLineShowLabelCols(LineShowLabelCols);

} catch (Exception e) {

e.printStackTrace();

}

}

private void setDragPara() {

// 拖动数据列设置

chart.setEditColumn(this.EditColumn);

// 拖动起始行设置

chart.setStartIndex(this.StartRow);

chart.setJlabel(this.DragLabel);

// 是否 实现拖动 设置

chart.setIsDrag(this.sftd);

chart.setTableDataModel(this.tm);

}

private String[] XLab = null;

/**

* 设置 图形x轴标签

* @param XLab

*/

public void setXLab(String[] XLab) {

this.XLab = XLab;

}

public void setXpoints(int xpoints) {

this.xpoints = xpoints;

}

/**

* x轴显示坐标间隔点数

*/

private int XTabN = 10;

/**

* 设置xy轴

*/

private void setXY() {

try {

chart.setXzPoints(this.xpoints);//x轴 分割线

chart.setXmin(this.xmin);

if (XLab == null) {

chart.setXmax(this.xmax);

this.xpoints = 12;

period period1 = new period();

String[] ls_pd = new String[97];

for (int i = 0; i < 96; i++) {

ls_pd[i] = period1.getPeriod()[i];

}

ls_pd[96] = "24:00";

for (int i = 0; i <= 12; i++) {

if (i == 0) {

chart.SetXlab(i, ls_pd[i]);

} else {

chart.SetXlab(i, ls_pd[i * 8]);

}

}

chart.setConvertBool(true);

chart.setdxLab(ls_pd);

} else {

int len = this.data[0].length;

this.XTabN = len / 8 + 1;

this.xpoints = len / this.XTabN + 1;

chart.setXzPoints(this.xpoints);//x轴 分割线

this.index = new String[len];

for (int i = 0; i < len; i++) {

index[i] = String.valueOf(i);

}

this.xmax = this.xpoints * this.XTabN;

chart.setXmax(this.xmax);

String[] TmXLab = new String[this.xmax];

for (int i = 0; i < this.xmax; i++) {

if (i < XLab.length) {

TmXLab[i] = XLab[i];

} else {

TmXLab[i] = "";

}

}

for (int i = 0; i < this.xpoints; i++) {

if (i * this.XTabN < len) {

chart.SetXlab(i, TmXLab[i * this.XTabN]);

} else {

chart.SetXlab(i, "");

}

}

chart.SetXlab(this.xpoints, " ");

chart.setConvertBool(true);

chart.setdxLab(TmXLab);

}

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 获取最值

* @param data

*/

private void setMaxMin(String[][] data) {

if (this.maxv_zd) {

this.maxv = -999999999;

try {

if (data != null) {

for (int i = 0; i < data.length; i++) {

for (int j = 0; j < data[i].length; j++) {

if (data[i][j] != null && !data[i][j].equals("")) {

try {

double maxdd = Double.parseDouble( (data[i][j] == null || "null".equals(data[i][j]) || "".equals(data[i][j])) ? "0" : data[i][j]);

if ( maxdd > 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 < data.length; i++) {

for (int j = 0; j < data[i].length; j++) {

if (data[i][j] != null && !data[i][j].equals("")) {

try {

double mindd = Double.parseDouble( (data[i][j] == null || "null".equals(data[i][j]) || "".equals(data[i][j])) ? "0" : data[i][j]);

if (mindd < getMinv()) {

this.minv = mindd;

}

} catch (Exception e1) {

e1.printStackTrace();

}

http:// }

}

}

}

} catch (Exception e) {

e.printStackTrace();

}

if (getMinv() == 999999999) {

this.minv = 0;

} else {

if (getMinv() > 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();

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring与Shiro整合及加载权限表达式问题
下一篇:springboot动态加载Echarts柱状图
相关文章

 发表评论

暂时没有评论,来抢沙发吧~