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

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



一、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);// 设置每行的高度为20
		Industry.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>
				} else
					return;
			}
		});
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());
			} else
				continue;
		}
		//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++;
			} else
				continue;
		}
		// final JTable Industry = new JTable(rowData, column);
		// JScrollPane pane1 = new JScrollPane(Industry);
		return rowData;
	}
由于“行业个股数据.xls”表格显示的是所有行业下所有个股的数据,所以先获取到某个行业下的所有个股数量,存到j里面。
再创建一个二维数组存放个股数据,最后作为函数的返回值。


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





  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值