首页>代码>java swing开发企业人事管理系统源代码下载>/企业人事管理系统/src/com/mwq/frame/common/DeptAndPersonnelPanel.java
package com.mwq.frame.common;

import java.awt.BorderLayout;
import java.util.Iterator;
import java.util.Set;
import java.util.Vector;

import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTable;
import javax.swing.JTree;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;

import com.mwq.hibernate.Dao;
import com.mwq.hibernate.HibernateSessionFactory;
import com.mwq.hibernate.mapping.TbDept;
import com.mwq.hibernate.mapping.TbDutyInfo;
import com.mwq.hibernate.mapping.TbRecord;

public class DeptAndPersonnelPanel extends JPanel {

	private JTable table;

	private Vector<String> tableColumnV;

	private Vector<Vector<String>> tableValueV;

	private DefaultTableModel tableModel;

	private JTree tree;

	private Dao dao = Dao.getInstance();

	public DeptAndPersonnelPanel() {
		super();
		setLayout(new BorderLayout());

		final JSplitPane splitPane = new JSplitPane();
		splitPane.setDividerLocation(140);
		add(splitPane);

		final JScrollPane deptScrollPane = new JScrollPane();
		splitPane.setLeftComponent(deptScrollPane);

		// 初始化左侧的部门树
		DefaultMutableTreeNode root = new DefaultMutableTreeNode("全部职员");
		TbDept company = (TbDept) dao.queryDeptById(1);
		Set depts = company.getTbDepts();
		for (Iterator deptIt = depts.iterator(); deptIt.hasNext();) {
			TbDept dept = (TbDept) deptIt.next();
			DefaultMutableTreeNode deptNode = new DefaultMutableTreeNode(dept
					.getName());// 创建部门树的二级子节点
			root.add(deptNode);
			Set sonDepts = dept.getTbDepts();
			for (Iterator sonDeptIt = sonDepts.iterator(); sonDeptIt.hasNext();) {
				TbDept sonDept = (TbDept) sonDeptIt.next();
				deptNode.add(new DefaultMutableTreeNode(sonDept.getName()));// 创建部门树的叶子节点
			}
		}

		DefaultTreeModel treeModel = new DefaultTreeModel(root); // 利用根节点对象创建树模型对象

		tree = new JTree(treeModel);
		tree.addTreeSelectionListener(new TreeSelectionListener() {
			public void valueChanged(TreeSelectionEvent e) {
				TreePath path = e.getPath(); // 获得被选中树节点的路径
				tableValueV.removeAllElements();// 移除表格中的所有行
				if (path.getPathCount() == 1) {// 选中树的根节点
					showAllRecord();// 显示所有档案
				} else {// 选中树的子节点
					String deptName = path.getLastPathComponent().toString();// 获得选中部门的名称
					TbDept selectDept = (TbDept) dao.queryDeptByName(deptName);// 检索指定部门对象
					Iterator sonDeptIt = selectDept.getTbDepts().iterator();
					if (sonDeptIt.hasNext()) {// 选中树的二级节点
						while (sonDeptIt.hasNext()) {
							showRecordInDept((TbDept) sonDeptIt.next());// 显示选中部门所有子部门的档案
						}
					} else {// 选中树的叶子节点
						showRecordInDept(selectDept);// 显示选中部门的档案
					}
				}
				tableModel.setDataVector(tableValueV, tableColumnV);
				HibernateSessionFactory.closeSession();
			}
		});

		DefaultTreeCellRenderer render = new DefaultTreeCellRenderer();
		render.setLeafIcon(new ImageIcon());// 设置叶子结点的图标
		render.setClosedIcon(new ImageIcon());// 设置结点折叠时的图标
		render.setOpenIcon(new ImageIcon());// 设置结点展开时的图标
		tree.setCellRenderer(render);
		deptScrollPane.setViewportView(tree);

		final JScrollPane personnalScrollPane = new JScrollPane();
		splitPane.setRightComponent(personnalScrollPane);

		tableColumnV = new Vector<String>();// 创建表格列名向量
		String tableColumns[] = new String[] { "序    号", "档案编号", "姓    名",
				"性    别", "部    门", "职    务" };
		for (int i = 0; i < tableColumns.length; i++) {// 添加表格列名
			tableColumnV.add(tableColumns[i]);
		}

		tableValueV = new Vector<Vector<String>>();// 创建表格值向量
		showAllRecord();
		HibernateSessionFactory.closeSession();

		tableModel = new DefaultTableModel(tableValueV, tableColumnV);// 创建表格模型对象

		table = new JTable(tableModel);// 创建表格对象
		personnalScrollPane.setViewportView(table);
	}

	private void showAllRecord() {
		Iterator recordIt = dao.queryRecord().iterator();
		int sequenceNumber = 1;
		while (recordIt.hasNext()) {
			TbRecord record = (TbRecord) recordIt.next();
			Vector personnelV = new Vector<String>();
			personnelV.add(sequenceNumber++);
			personnelV.add(record.getRecordNumber());
			personnelV.add(record.getName());
			personnelV.add(record.getSex());
			TbDutyInfo dutyInfo = record.getTbDutyInfo();
			personnelV.add(dutyInfo.getTbDept().getName());
			personnelV.add(dutyInfo.getTbDuty().getName());
			tableValueV.add(personnelV);
		}
	}

	private void showRecordInDept(TbDept dept) {
		Iterator dutyInfoIt = dept.getTbDutyInfos().iterator();
		int sequenceNumber = 1;
		while (dutyInfoIt.hasNext()) {
			TbDutyInfo dutyInfo = (TbDutyInfo) dutyInfoIt.next();
			TbRecord record = dutyInfo.getTbRecord();
			Vector personnelV = new Vector<String>();
			personnelV.add(sequenceNumber++);
			personnelV.add(record.getRecordNumber());
			personnelV.add(record.getName());
			personnelV.add(record.getSex());
			personnelV.add(dutyInfo.getTbDept().getName());
			personnelV.add(dutyInfo.getTbDuty().getName());
			tableValueV.add(personnelV);
		}
	}

	public JTable getTable() {
		return table;
	}

	public void setTable(JTable table) {
		this.table = table;
	}

}
最近下载更多
caomin  LV4 2023年5月19日
poipoiiop  LV8 2023年1月8日
赵佳倩  LV1 2022年10月19日
qinshizun  LV1 2022年8月22日
微信网友_6084258495877120  LV1 2022年8月11日
baoligeer  LV5 2022年6月2日
姜广坤  LV14 2022年5月20日
12koko  LV3 2022年4月19日
wanglinddad  LV55 2022年4月14日
刘先生-OL  LV13 2022年3月23日
最近浏览更多
xdd123456 2024年12月26日
暂无贡献等级
zhao鑫 2024年12月19日
暂无贡献等级
KKKing0908 2024年10月7日
暂无贡献等级
暂无贡献等级
ljiahao2024 2024年9月5日
暂无贡献等级
255921158  LV5 2024年7月17日
wangming32  LV1 2024年7月15日
ZALZXB20030525 2024年7月1日
暂无贡献等级
微信网友_5986558820093952  LV4 2024年6月29日
放鞭炮  LV1 2024年6月29日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友