关于Jtable点击动态显示Excel表格数据

来源:互联网 发布:怎么在淘宝找工作 编辑:程序博客网 时间:2024/06/04 18:05

老师让我写一个关于数据动态显示的界面,具体功能如下图所示:
点击上面表格中的某一行,显示改行行业名称下面每个行业对应的所有个股显示出来



一、java读取Excel表格数据问题的解决

java读取Excel表格需要一个第三方jar包,叫做jxl.jar,去网上下载一下导入到java工程中去。
我将读取的函数包装起来,读到Excel表格的路径时候,就将表格中所有数据保存在一个自定义的vector数组中
public static Vector<Industry_data> importExcel(String fileName) {Vector<Industry_data> v = new Vector<Industry_data>();try {Workbook book = Workbook.getWorkbook(new File(fileName));Sheet sheet = book.getSheet(0); // 获得第一个工作表对象int rows = sheet.getRows();for (int i = 1; i < rows; i++) {Cell[] cell = sheet.getRow(i);if (cell.length == 0)continue;Industry_data data = new Industry_data();data.setName(sheet.getCell(0, i).getContents());data.setFinance(sheet.getCell(1, i).getContents());data.setFinance_increase(sheet.getCell(2, i).getContents());data.setFinance_proporation(sheet.getCell(6, i).getContents());data.setFinance_rank(sheet.getCell(7, i).getContents());v.add(data);}book.close();} catch (Exception e) {}return v;}
在主函数中,只需调用这个函数,传进去一个路径,就可以获取表格数据的内容
String fileName = "D:\\2016-03-09两融个股、行业增幅.xls";Vector<Industry_data> content = readExcel.importExcel(fileName);Industry_data[] p = new Industry_data[content.size()];Object[][] rowData = new Object[content.size()][5];for (int i = 0; i < content.size(); i++) {p[i] = (Industry_data) content.get(i);rowData[i][0] = p[i].getName();rowData[i][1] = p[i].getFinance();rowData[i][2] = p[i].getFinance_increase();rowData[i][3] = p[i].getFinance_proporation();rowData[i][4] = p[i].getFinance_rank();System.out.println(p[i].getName() + "\t" + p[i].getFinance() +"\t" + p[i].getFinance_increase() + "\t" + p[i].getFinance_proporation() + "\t" + p[i].getFinance_rank()); }
注:在这里,我将表格中数据包装成一个类Industry_data.java
public class Industry_data {private String name;//行业名称private String finance;//当日融资金额private String finance_increase;//当日融资增幅private String finance_proporation;//占总融资比private String finance_rank;//融资排名public Industry_data() {// TODO Auto-generated constructor stub}public Industry_data(String name,String finance,String finance_increase,String finance_proporation,String finance_rank){super();this.name=name;this.finance=finance;this.finance_increase=finance_increase;this.finance_proporation=finance_proporation;this.finance_rank=finance_rank;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getFinance() {return finance;}public void setFinance(String finance) {this.finance = finance;}public String getFinance_increase() {return finance_increase;}public void setFinance_increase(String finance_increase) {this.finance_increase = finance_increase;}public String getFinance_proporation() {return finance_proporation;}public void setFinance_proporation(String finance_proporation) {this.finance_proporation = finance_proporation;}public String getFinance_rank() {return finance_rank;}public void setFinance_rank(String finance_rank) {this.finance_rank = finance_rank;}}

二、显示上面一部分表格的数据

显示表格数据还是比较简单的,粘一下简单的code。
final Object[] columnNames = { "行业名称", "当日融资金额", "当日融资增幅",// 列名最好用final修饰"占总融资比", "融资排名" };final JTable Industry = new JTable(rowData, columnNames);Industry.setRowHeight(30);// 设置每行的高度为20Industry.setRowMargin(5);// 设置相邻两行单元格的距离JScrollPane pane1 = new JScrollPane(Industry);panel.add(pane1);

三、对上面表格点击事件判断并显示出下面表格

对表格Industry表格添加点击事件Industry.addMouseListener(new MouseAdapter(){}
然后在里面设置判断点击表格的次数触发点击事件。
Industry.addMouseListener(new MouseAdapter() {public void mouseClicked(MouseEvent e) {if (e.getClickCount() == 1)// 单击表格一次{//先删除下面的表格DefaultTableModel ulcTableModel = (DefaultTableModel) example2.getModel();for (int i = ulcTableModel.getRowCount() - 1; i >= 0; i--) {ulcTableModel.removeRow(i);}int row = ((JTable) e.getSource()).rowAtPoint(e.getPoint()); // 获得行位置int col = ((JTable) e.getSource()).columnAtPoint(e.getPoint()); // 获得列位置String name = (String) Industry.getValueAt(row, 0);</span>name = name.substring(1);System.out.println("第" + (row + 1) + "行,第" + (col + 1)+ "列被点击了,内容为" + name);//添加下面的表格的数据部分Object[][] rowData2 = newTable(name);tablemodel.setDataVector(rowData2, column);example2.updateUI();</span>} elsereturn;}});
name是点击表格某一行获取到的行业名称,newTable(String S)方法用来获得该行业下所有
个股的数据,返回的是一个二维数组格式的Object。最后将表格标题以及表格数据添加到DefaultTableModel中,对下面表的
定义的代码如下:
final Object[] column = { "选股日期", "代码", "名称", "行业", "盘子大小(亿)", "收盘价","当天增幅", "1天增幅", "二日增幅", "2天涨幅", "三日增幅", "3天涨幅", "五日增幅", "十日增幅","连增天数", "融资/个股总资产", "个股融资/两市总融资产" };final DefaultTableModel tablemodel=new DefaultTableModel();final JTable example2 = new JTable(tablemodel);example2.setRowHeight(20);JScrollPane pane2 = new JScrollPane(example2);panel.add(pane2);
对于newTable()函数,代码如下:
public static Object[][] newTable(String name) {// 选股日期 代码 名称 行业 盘子大小(亿) 收盘价 当天增幅 1天涨幅 二日增幅 2天涨幅 三日增幅 3天涨幅 五日增幅 十日增幅// 连增天数 融资/个股总资产 个股融资/两市总融资产final Object[] column = { "选股日期", "代码", "名称", "行业", "盘子大小(亿)", "收盘价","当天增幅", "1天增幅", "二日增幅", "2天涨幅", "三日增幅", "3天涨幅", "五日增幅", "十日增幅","连增天数", "融资/个股总资产", "个股融资/两市总融资产" };String fileName = "D:\\行业个股数据.xls";Vector<Individual_stock> content = readExcel.importExcel2(fileName);Individual_stock[] p = new Individual_stock[content.size()];// System.out.println(content.size());int j = 0;for (int i = 0; i < content.size(); i++) {p[i] = (Individual_stock) content.get(i);// System.out.println(((Individual_stock)content.get(i)).getIndustry_name());// System.out.println(p[i].getIndustry_name()+"|"+name+name.equals(p[i].getIndustry_name().substring(1)));if (name.equals(p[i].getIndustry_name().substring(1))) {j++;// System.out.println(p[i].getDate() + "\t" + p[i].getCode()// + "\t" + p[i].getName() + "\t"// + p[i].getIndustry_name() + "\t" + p[i].getSize()// + "\t" + p[i].getClosing_price() + "\t"// + p[i].getToday_Add() + "\t"// + p[i].getOneday_Increase() + "\t"// + p[i].getTwoday_Add() + "\t"// + p[i].getTwoday_Increase() + "\t"// + p[i].getThreeday_Add() + "\t"// + p[i].getThreeday_Increase() + "\t"// + p[i].getFiveday_Increase() + "\t"// + p[i].getTenday_Increase() + "\t" + p[i].getLast_day()// + "\t" + p[i].getTotal_assets1() + "\t"// + p[i].getTotal_assets2());} elsecontinue;}//System.out.println("j=" + j);Object[][] rowData = new Object[j][17];int k = 0;for (int i = 0; i < content.size(); i++) {p[i] = (Individual_stock) content.get(i);// System.out.println(((Individual_stock)content.get(i)).getIndustry_name());// System.out.println(p[i].getIndustry_name()+"|"+name+name.equals(p[i].getIndustry_name().substring(1)));if (name.equals(p[i].getIndustry_name().substring(1))) {//System.out.println("k=" + k);rowData[k][0] = p[i].getDate();rowData[k][1] = p[i].getCode();rowData[k][2] = p[i].getName();rowData[k][3] = p[i].getIndustry_name();rowData[k][4] = p[i].getSize();rowData[k][5] = p[i].getClosing_price();rowData[k][6] = p[i].getToday_Add();rowData[k][7] = p[i].getOneday_Increase();rowData[k][8] = p[i].getTwoday_Add();rowData[k][9] = p[i].getTwoday_Increase();rowData[k][10] = p[i].getThreeday_Add();rowData[k][11] = p[i].getThreeday_Increase();rowData[k][12] = p[i].getFiveday_Increase();rowData[k][13] = p[i].getTenday_Increase();rowData[k][14] = p[i].getLast_day();rowData[k][15] = p[i].getTotal_assets1();rowData[k][16] = p[i].getTotal_assets2();// System.out.println(p[i].getDate() + "\t" + p[i].getCode()// + "\t" + p[i].getName() + "\t"// + p[i].getIndustry_name() + "\t" + p[i].getSize()// + "\t" + p[i].getClosing_price() + "\t"// + p[i].getToday_Add() + "\t"// + p[i].getOneday_Increase() + "\t"// + p[i].getTwoday_Add() + "\t"// + p[i].getTwoday_Increase() + "\t"// + p[i].getThreeday_Add() + "\t"// + p[i].getThreeday_Increase() + "\t"// + p[i].getFiveday_Increase() + "\t"// + p[i].getTenday_Increase() + "\t" + p[i].getLast_day()// + "\t" + p[i].getTotal_assets1() + "\t"// + p[i].getTotal_assets2());k++;} elsecontinue;}// final JTable Industry = new JTable(rowData, column);// JScrollPane pane1 = new JScrollPane(Industry);return rowData;}
由于“行业个股数据.xls”表格显示的是所有行业下所有个股的数据,所以先获取到某个行业下的所有个股数量,存到j里面。
再创建一个二维数组存放个股数据,最后作为函数的返回值。


代码的结构如下,比较简单:





0 0
原创粉丝点击