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;i0){
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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。