DragChartPanel可拖拽曲线应用详解
DragChartPanel 是javacs架构中的一种图形展现的开源组件。
业务需求需要用到DragChartPanel ,这是一种根据jtable表格中的数据给与展示的图形组件。它和其他图形组件区别再与它可以进行拖拽,用户通过它不仅可以看出数据变化的曲线,而且可以通过拖拽修改表格中的数据。
下面展示一下它的效果图:
丑归丑,但是很实用呀。
下面展示它的代码
初始化坐标格图:
chartpanel1=newDragChartPanel(this); chartpanel1.setXtitle("时间"); chartpanel1.setYtitle("负荷(MW)"); chartpanel1.setDragLabel(jLabel1); chartpanel1.setTm((DefaultTableModel)jTable1.getModel()); chartpanel1.setStartRow(0); chartpanel1.setChartPanel(jPanel11);
绘制曲线:
privatevoiddrawGraph(intcol){ jLabel1.setText(""); intcount=jTable1.getRowCount(); String[][]chartData1=newString[1][count]; String[]chartIndex=newString[count]; DefaultTableModeltm=(DefaultTableModel)jTable1.getModel(); for(inti=0;i这个组件有一个缺点。只支持对列进行修改,这是这个组件的一个特点(拖动曲线表格的列会发生改动)。
为了使用它,很多表的结构就不得不迎合这一缺点。例如如下表结构:
都是按列展示的。对于有些情况很不合理!如何解决(思考中。。。。。。)
上面思考的问题解决了!!!
源码中有这样一个字段:
再使用的过程中会出现如下情况:
这个时候你get哪个model就无所谓了,为了避免影响,随便弄一样不会发生改变的model吧。
这样,拖动曲线的时候,label的值会实时显示曲线的坐标。
那么,给上面的label加一个监听,改变值的时候,将label的内容用“:”分割开,不刚好是x轴和y轴的值了吗?
对应横向表格中,直接再label监听事件中就可以更改table的值。(完美!!!)
注意一下:有时拖动x轴的坐标是很详细很详细的数据移动,是因为你选这了setIndex而不是setXLab
privatevoidinitChartline(){ //填充图形 String[][]ChartData=newString[1][24]; String[]ChartIndex=newString[24]; if(fixTable.getRowCount()>0){ for(inti=0;i //曲线颜色 privatejava.awt.Color[]Lcol={ java.awt.Color.red, java.awt.Color.blue, java.awt.Color.blue};它的源码:
/* *Tochangethistemplate,chooseTools|Templates *andopenthetemplateintheeditor. */ packagecom.qctc.view.common.frame.pub; importcom.qctc.common.util.period; importcom.qctc.common.Constant; importcom.qctc.view.common.frame.BaseSubTabModule; importcom.qctc.view.common.frame.pub.datasysgraphdrag.datasysgraph; importjava.awt.BorderLayout; importjava.awt.Color; importjava.awt.Container; importjava.awt.Dimension; importjavax.swing.JLabel; importjavax.swing.JPanel; importjavax.swing.table.DefaultTableModel; /** * *@authorAdministrator */ publicclassDragChartPanel{ privatejava.awt.Color[]Lcol=Constant.Lcol; privateColorbgcolor=newColor(204,204,255);//背景色 privateColorrectcolor=Color.white;//图形矩形内颜色 publicDragChartPanel(BaseSubTabModuleparentModule,Colorbgcolor,Colorrectcolor){ this.bgcolor=bgcolor; this.rectcolor=rectcolor; this.parentModule=parentModule; initChartPanel(); } publicDragChartPanel(BaseSubTabModuleparentModule){ this.parentModule=parentModule; initChartPanel(); } publicDragChartPanel(){ initChartPanel(); } publicvoidinitChartPanel(){ //设置是否翻页 chart.setMutiPage(false); chart.setConvertBool(true); //设置底色 chart.setBackColor(bgcolor); //chart.setBackColor(newColor(192,192,192)); //设置图形区域的边框颜色 chart.setBorderColor(Color.red); //设置图形区域的底色 //chart.setChartRectColor(newColor(204,204,250)); //if(Constant.SYSTEM_AREA.equals("山西")){ chart.setChartRectColor(rectcolor); //chart.setChartRectColor(newColor(74,74,107)); //} //设置xy坐标轴颜色 chart.setXyColor(newColor(30,30,30)); //设置标题颜色 chart.setTitleColor(newColor(30,30,30)); //设置网格颜色 chart.setGridColor(newColor(50,180,180)); //设置是否显示网格1显示其他不显示 chart.setShowHidegrid(1); //设置显示点的大小 //chart.setShowHidep(0); //if(Constant.SYSTEM_AREA.equals("山西")){ chart.setShowHidep(1); //} //鼠标移动曲线上是否自动显示横纵坐标十字线 chart.setshowCrossLine(true); //设置鼠标移动曲线显示的十字线颜色 chart.setCrossLineColor(newColor(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(newBorderLayout()); chartpanel.add(getChart(),java.awt.BorderLayout.CENTER); chart.addMouseListener(newjava.awt.event.MouseAdapter(){ publicvoidmousePressed(java.awt.event.MouseEventevt){ dragState=true; } publicvoidmouseReleased(java.awt.event.MouseEventevt){ dragState=false; } }); } publicbooleanisDragState(){ returndragState; } privatebooleandragState=false; protectedBaseSubTabModuleparentModule; privateJPanelchartpanel=newJPanel(); // privatedatasysgraphchart=newdatasysgraph(); //图形参数 privatedoublemaxv=-999999999,minv=999999999; privatebooleanmaxv_zd=true; privatebooleanminv_zd=true; privateString[][]data=null; privateString[]ls_linename=null; privateStringtitle=""; privateStringxtitle=""; privateStringytitle=""; privateintxpoints=12; privateintxmax=96; privateintxmin=0; privateString[]index=null; privateintEditColumn=0;//拖动关联列 privateintStartRow=0;//拖动起始行 privateJLabelDragLabel=null;//关联table privateDefaultTableModeltm=null;//关联的tm privatebooleansftd=true; privateintShowLabelCol=-1; privateint[]LineShowLabelCols; publicvoidsetSftd(booleansftd){ this.sftd=sftd; } publicvoidsetShowLabelCol(intShowLabelCol){ this.ShowLabelCol=ShowLabelCol; } publicvoidsetLineShowLabelCols(int[]LineShowLabelCols){ this.LineShowLabelCols=LineShowLabelCols; } publicvoidsetTm(DefaultTableModeltm){ this.tm=tm; } publicvoidsetDragLabel(JLabelDragLabel){ this.DragLabel=DragLabel; } publicvoidsetEditColumn(intEditColumn){ this.EditColumn=EditColumn; } publicvoidsetStartRow(intStartRow){ this.StartRow=StartRow; } publicvoidsetXtitle(Stringxtitle){ this.xtitle=xtitle; } publicvoidsetYtitle(Stringytitle){ this.ytitle=ytitle; } publicvoidsetIndex(String[]index){ this.index=index; } publicvoidsetData(String[][]data){ this.data=data; } publicvoidsetLs_linename(String[]ls_linename){ this.ls_linename=ls_linename; } publicvoidsetTitle(Stringtitle){ this.title=title; } publicdatasysgraphgetChart(){ try{ createChart(); returnchart; }catch(Exceptione){ e.printStackTrace(); returnnull; } } publicdatasysgraphgetChartByColor(Color[]col){ try{ createChartByColor(col); returnchart; }catch(Exceptione){ e.printStackTrace(); returnnull; } } /** *设置chart要加入的JPanel *@parampanel */ publicvoidsetChartPanel(JPanelpanel){ Containerparent=chartpanel.getParent(); if(parent!=null){ parent.removeAll(); } panel.add(chartpanel); panel.setMinimumSize(newDimension(300,100)); } privatevoidcreateChart(){ setMaxMin(this.data); setPara(); setDragPara(); setXY(); buildChart(); } privatevoidcreateChartByColor(Color[]col){ setMaxMin(this.data); setPara(); setDragPara(); setXY(); buildChartByColor(col); } /** *生成图 */ privatevoidbuildChart(){ try{ if(this.data!=null){ intlen=this.data.length; for(inti=0;igetMaxv()){ this.maxv=maxdd; } }catch(Exceptione1){ e1.printStackTrace(); } } } } } }catch(Exceptione){ 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(inti=0;i 0){ this.minv=getMinv()*0.95; }else{ this.minv=getMinv()*1.05; } } } } /** *@returntheLcol */ publicjava.awt.Color[]getLcol(){ returnLcol; } /** *@paramLcoltheLcoltoset */ publicvoidsetLcol(java.awt.Color[]Lcol){ this.Lcol=Lcol; } /** *@returnthemaxv */ publicdoublegetMaxv(){ returnmaxv; } /** *@parammaxvthemaxvtoset */ publicvoidsetMaxv(doublemaxv){ this.maxv=maxv; this.maxv_zd=false; } /** *@returntheminv */ publicdoublegetMinv(){ returnminv; } /** *@paramminvtheminvtoset */ publicvoidsetMinv(doubleminv){ this.minv=minv; this.minv_zd=false; } /** *返回修改的曲线数据 *2013-04-08hwh *@return */ publicdouble[]getGraphDataY(){ returnchart.getGraphDataY(); } } 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。