react 前端框架如何驱动企业数字化转型与创新发展
481
2023-07-04
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~