当代社会,信息技术如此的发达,要求也越来越高了,对数据显示方便更为苛刻。最原始的数据显示就是数据库表中的方式,但是很多不是专业的人看不懂这个表,或者是看多了觉得累,乏味,要求做成趋势图,饼状图甚至是动画的,更深得人心!我现在要把GPS定位的位置变化做成一个趋势图,一开始接收这个项目的时候,我直接把报表做成一个表格的形式显示在页面上,但是客户觉得太过于白板,没有吸引别人的眼球,要求做一个趋势图,可以查看年月日,任意的变化图!现在,我就会java+jsp+js来做一个趋势图报表。以下这个图标太呆板了!
工具/原料
Myeclipse/eclipse
浏览器
电脑
mysql数据库
Matplot3d_4_dhj_f(v1.0).jar包
下载jar包
1、Matplot3d_4_dhj_f(v1.0).jar下载地址是https://gitee.com/tanling8334/Matplot3D-for-Java你可以先把页面上两个jar包和案例代码都下载下来,好好研究研究一下
实现的功能
1、从数据库里面查询数据,然后呈现在图形上面可以放大和缩小按住鼠标不断的调整图形的视角
具体代码
1、加载类资源管理器packagetanling.matplot4j.demo;importjava.io.BufferedReader;importjava.io.InputStream;importjava.io.InputStreamReader;publicclassTextFileHelper{/**author:@命运的信徒*date:2019/2/19*arm:获取路径*/由于不能发表超过1500字的经验,代码在下方以图片的形式展示}}
2、设置组件的字体、大小packa壹执慵驾getanling.matplot4j.demo;importjava.uti造婷用痃l.Enumeration;importjavax.swing.UIManager;importjavax.swing.plaf.FontUIResource;importtanling.matplot_4j.comment.SysConstents;publicclassUIUtil{publicstaticvoidinitGlobalFont(){//设置各个组件的字体FontUIResourcefontUIResource=newFontUIResource(SysConstents.DEFAULT_FONT);//for(Enumerationkeys=UIManager.getDefaults().keys();keys.hasMoreElements();){Objectkey=keys.nextElement();Objectvalue=UIManager.get(key);if(valueinstanceofFontUIResource){UIManager.put(key,fontUIResource);}}}}
连接数据库
1、数据库连接池的代码packagecn.com.jdbc;importjava.io.InputStream;importjava.sql.Connection;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;importjava.util.Properties;importjavax.sql.DataSource;importorg.apache.commons.dbcp.BasicDataSourceFactory;/***@ClassName:JdbcUtils_DBCP*@Description:数据库连接工具类*@author:命运的信徒*@date:2018-10-13**/publicclassJdbcUtils_DBCP{/***在java中,编写数据库连接池需实现java.sql.DataSource接口,每一种数据库连接池都是DataSource接口的实现*DBCP连接池就是java.sql.DataSource接口的一个具体实现*/由于不能发表超过1500字的经验,代码在下方以图片的形式展示}}
3d可视化代码
1、右侧鼠标伸缩大小以及观察位置的面板packagecn.com.test;importjava.awt.BorderLayout;importjava.awt.TextArea;importjavax.swing.BorderFactory;importjavax.swing.JPanel;importjavax.swing.JTabbedPane;importtanling.matplot_4j.comment.SysConstents;importtanling.matplot_4j.d3d.facade.MatPlot3DMgr;importtanling.matplot_4j.style.ColorHelper;publicabstractclassAbsContentPanelextendsJPanel{/****/由于不能发表超过1500字的经验,代码在下方以图片的形式展示}
2、查询数据库,把数据显示在图上packagecn.com.test;importjava.awt.geom.Point2D;importjava.util.ArrayList;importjava.util.List;importtanling.matplot4j.demo.TextFileHelper;importtanling.matplot_4j.d3d.facade.MatPlot3DMgr;publicclassCurves2DContentPanelextendsAbsContentPanel{/****/由于不能发表超过1500字的经验,代码在下方以图片的形式展示}
3、具体查询数据库的java代码packagecn饱终柯肢.com.test;importjava.sql.Connection;importjava.sql.PreparedStatement;足毂忍珩importjava.sql.ResultSet;importjava.sql.SQLException;importjava.text.SimpleDateFormat;importjava.util.ArrayList;importjava.util.List;importcn.com.jdbc.JdbcUtils_DBCP;publicclassDisplacement{staticList<String>listx=null;staticList<String>listy=null;staticList<String>listh=null;privatestaticConnectionconn=null;privatestaticPreparedStatementst=null;privatestaticResultSetrs=null;publicstaticvoidselectPlace(Stringaddress,Stringrq){listx=newArrayList<String>();listy=newArrayList<String>();listh=newArrayList<String>();//1.根据地址、当天的日期、和标准量,来计算偏移量SimpleDateFormatsim=newSimpleDateFormat("yyyy-MM-dd");//2.查询数据库里当天的所有位移量Stringsql="select*fromportwhereStationName=?andStartTimelike?orderbyStartTimeasc";rq=rq+"%";String[]str=newString[]{address,rq};try{//获取数据库连接//获取数据库连接conn=JdbcUtils_DBCP.getConnection();st=conn.prepareStatement(sql);if(str!=null){for(inti=0;i<str.length;i++){st.setString(i+1,str[i]);}}rs=st.executeQuery();while(rs.next()){//1.xy三个集合listx.add(rs.getString(8));listy.add(rs.getString(9));listh.add(rs.getString(10));}}catch(SQLExceptione){e.getStackTrace();}finally{try{if(rs!=null){rs.close();}if(st!=null){st.close();}if(conn!=null){conn.close();}}catch(SQLExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}}}
4、鼠标事件packagecn.com.test;importja箪滹埘麽va.awt.Color;importjava.awt.Dimension稆糨孝汶;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.util.Observable;importjava.util.Observer;importjavax.swing.BorderFactory;importjavax.swing.ButtonGroup;importjavax.swing.JCheckBox;importjavax.swing.JComponent;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JPanel;importjavax.swing.JRadioButton;importjavax.swing.JTextField;importtanling.matplot_4j.comment.SysConstents;importtanling.matplot_4j.d3d.base.speg.Point3D;importtanling.matplot_4j.d3d.facade.MatPlot3DMgr;importtanling.matplot_4j.style.ColorHelper;publicclassOptionPanelextendsJPanelimplementsObserver{/****/由于不能发表超过1500字的经验,代码在下方以图片的形式展示}
5、主窗口packagec艘绒庳焰n.com.test;importjava.awt.BorderLayout;importjava旌忭檀挢x.swing.JFrame;importjavax.swing.JPanel;importjavax.swing.SwingUtilities;publicclassTestextendsJFrame{/****/privatestaticfinallongserialVersionUID=1L;privateMainPanelmainPanel;publicTest(Stringtitle){super(title);this.mainPanel=newMainPanel(this);JPanelcontentPanel=newJPanel();contentPanel.setLayout(newBorderLayout());this.setContentPane(contentPanel);mainPanel.setType(MainPanel.CURVES_PLANE);contentPanel.add(mainPanel,BorderLayout.CENTER);}publicMainPanelgetMainPanel(){returnmainPanel;}publicstaticvoidmain(String[]args){Testjf=newTest("小栗子");try{SwingUtilities.updateComponentTreeUI(jf);}catch(Exceptione){e.printStackTrace();}jf.setDefaultCloseOperation(jf.EXIT_ON_CLOSE);jf.setSize(1300,820);jf.setVisible(true);}}
6、如果使用连接池的话,别忘记配置还有别忘记引入相应的jar包。