package com.vci.client.logon.client; import java.awt.BorderLayout; import java.awt.Color; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter; import java.lang.reflect.InvocationTargetException; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JSplitPane; import javax.swing.event.TreeExpansionEvent; import javax.swing.event.TreeExpansionListener; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.TreePath; import com.vci.client.LogonApplication; import com.vci.client.framework.delegate.FunctionClientDelegate; import com.vci.client.framework.rightConfig.object.FunctionObject; import com.vci.client.framework.scaffold.AbstractTabbedMainPanel; import com.vci.client.framework.scaffold.GenericMenuBar; import com.vci.client.framework.specialrole.SpecialRoleClientObject; import com.vci.client.framework.specialrole.SpecialRoleTreeClientObject; import com.vci.client.logon.base.BaseMenuBar; import com.vci.client.ui.frame.UIConstructorInterface; import com.vci.client.ui.swing.components.VCIJPanel; import com.vci.client.ui.swing.components.VCIJTree; import com.vci.client.ui.tree.VCIBaseTreeModel; import com.vci.client.ui.tree.VCIBaseTreeNode; import com.vci.corba.common.VCIError; /** * 系统模块的主界面 * @author liud * */ public class VCISpecialModuleMainPanel extends AbstractTabbedMainPanel{ /** * */ private static final long serialVersionUID = 8648659519474762796L; /** * 主界面的分隔面板 */ private JSplitPane mainSplitPane = null; /** * 主界面左边的面板 */ private JScrollPane leftPanel = new JScrollPane(); /** * 主界面右边的滚动面板 */ private JScrollPane rightScrollPane = new JScrollPane(); /** * 存储左边树上选中的模块的名称 */ private String selectedName = ""; /** * 主界面左边的树 */ private VCIJTree tree = null; /** * treeModel */ private VCIBaseTreeModel treeModel = null; private FunctionClientDelegate funcDel = new FunctionClientDelegate(LogonApplication.getUserEntityObject()); /** * 存储当前模块对象 */ private SpecialRoleClientObject specialRoleClientObject; public VCISpecialModuleMainPanel(SpecialRoleClientObject specialRoleClientObject){ this.specialRoleClientObject = specialRoleClientObject; } public void init(){ mainSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,leftPanel,rightScrollPane); mainSplitPane.setDividerSize(10); mainSplitPane.setContinuousLayout(true); mainSplitPane.setOneTouchExpandable(true); mainSplitPane.setDividerLocation(200); initLeft(); initRight(); this.setLayout(new BorderLayout()); this.add(mainSplitPane,BorderLayout.CENTER); } private void initLeft(){ VCIBaseTreeNode rootNode = new VCIBaseTreeNode(specialRoleClientObject.getModuleName(), "root"); rootNode.setExpand(true); treeModel = new VCIBaseTreeModel(rootNode); tree = new VCIJTree(treeModel,new VCISpecialModuleMainTreeCellRenderer(specialRoleClientObject)); // tree = new VCIJTree(treeModel); // tree.setCellRenderer(new VCIModuleMainTreeCellRenderer(curFuncObj)); /**初始化一级节点**/ initTreeNode(rootNode); /**初始树时只初始一级节点,如果有多级菜单,展开时加载**/ tree.addTreeExpansionListener(new TreeExpansionListener() { @Override public void treeExpanded(TreeExpansionEvent event) { TreePath path = event.getPath(); VCIBaseTreeNode selectNode = (VCIBaseTreeNode) path.getLastPathComponent(); if(!"root".equals(selectNode.getObj())||!selectNode.isExpand()){ selectNode.setExpand(true); SpecialRoleClientObject obj = (SpecialRoleClientObject)selectNode.getObj(); // try { // SpecialRoleClientObject[] objs = RightControlUtil.getFunctionsByRight(obj.getId(), LogonApplication.getUserEntityObject().getUserName());; SpecialRoleTreeClientObject[] objs = obj.getSpecialRoleTreeClientObject(); for(int i = 0;i < objs.length;i++){ VCIBaseTreeNode node = new VCIBaseTreeNode(objs[i].getNodeName(), objs[i]); selectNode.add(node); // if(!"1".equals(funcDel.checkChildObject(objs[i].getId()))){//如果下级没有模块 // node.setLeaf(true); // } } treeModel.reload(selectNode); // } catch (VCIException e) { // e.printStackTrace(); // } } } @Override public void treeCollapsed(TreeExpansionEvent event) { } }); /**树节点选中时,根据节点上的模块对象标识去加载具体的类进行展现**/ tree.addTreeSelectionListener(new TreeSelectionListener() { @Override public void valueChanged(TreeSelectionEvent e) { TreePath path = e.getPath(); VCIBaseTreeNode selectNode = (VCIBaseTreeNode) path.getLastPathComponent(); if(!"root".equals(selectNode.getObj())){ SpecialRoleTreeClientObject obj = (SpecialRoleTreeClientObject)selectNode.getObj(); loadRightPanel(obj); mainSplitPane.setDividerLocation(mainSplitPane.getDividerLocation()); }else{ // rightScrollPane.getViewport().add(new JPanel()); //added by ligang 当点击树的顶级节点时,右边界面进行刷新 mainSplitPane.setRightComponent(new JPanel()); mainSplitPane.setDividerLocation(mainSplitPane.getDividerLocation()); } } }); leftPanel.getViewport().add(tree); } private void initRight(){ rightScrollPane.setAutoscrolls(true); } private void initTreeNode(VCIBaseTreeNode rootNode){ try { // final FunctionObject[] objs = RightControlUtil.getFunctionsByRight(curFuncObj.getId(), LogonApplication.getUserEntityObject().getUserName()); final SpecialRoleTreeClientObject[] objs = specialRoleClientObject.getSpecialRoleTreeClientObject(); if(objs.length > 1){ for(int i = 0;i < objs.length;i++){ VCIBaseTreeNode node = new VCIBaseTreeNode(objs[i].getNodeName(), objs[i]); rootNode.add(node); // if(!"1".equals(funcDel.checkChildObject(objs[i].getId()))){//如果下级没有模块 // node.setLeaf(true); // } } treeModel.reload(rootNode); }else if(objs.length == 1){ mainSplitPane.setDividerSize(0); mainSplitPane.setOneTouchExpandable(false); mainSplitPane.setDividerLocation(0); mainSplitPane.addComponentListener(new ComponentAdapter(){ public void componentResized(ComponentEvent e) { mainSplitPane.setDividerLocation(0); } }); // if(curFuncObj.isShowTodoData()){ // objs[0].setShowTodoData(curFuncObj.isShowTodoData()); // objs[0].setMap(curFuncObj.getMap()); // } loadRightPanel(objs[0]); mainSplitPane.setDividerLocation(mainSplitPane.getDividerLocation()); }else{ mainSplitPane.setDividerSize(0); mainSplitPane.setOneTouchExpandable(false); mainSplitPane.setDividerLocation(0); JPanel pal = new JPanel(); JLabel lbl = new JLabel("加载模块面板出错!"); lbl.setForeground(Color.red); pal.add(lbl); rightScrollPane.getViewport().add(pal); } /**added by ligang 双击mainSplitPane左边框时,系统加载出权限树节点的处理**/ mainSplitPane.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { if(objs.length == 1) { mainSplitPane.setDividerSize(0); mainSplitPane.setOneTouchExpandable(false); mainSplitPane.setDividerLocation(0); mainSplitPane.setDividerLocation(mainSplitPane.getDividerLocation()); } } @Override public void mousePressed(MouseEvent arg0) { if(objs.length == 1) { mainSplitPane.setDividerSize(0); mainSplitPane.setOneTouchExpandable(false); mainSplitPane.setDividerLocation(0); mainSplitPane.setDividerLocation(mainSplitPane.getDividerLocation()); } } @Override public void mouseEntered(MouseEvent arg0) { if(objs.length == 1) { mainSplitPane.setDividerSize(0); mainSplitPane.setOneTouchExpandable(false); mainSplitPane.setDividerLocation(0); mainSplitPane.setDividerLocation(mainSplitPane.getDividerLocation()); } } @Override public void mouseReleased(MouseEvent arg0) { if(objs.length == 1) { mainSplitPane.setDividerSize(0); mainSplitPane.setOneTouchExpandable(false); mainSplitPane.setDividerLocation(0); mainSplitPane.setDividerLocation(mainSplitPane.getDividerLocation()); } } @Override public void mouseExited(MouseEvent arg0) { if(objs.length == 1) { mainSplitPane.setDividerSize(0); mainSplitPane.setOneTouchExpandable(false); mainSplitPane.setDividerLocation(0); mainSplitPane.setDividerLocation(mainSplitPane.getDividerLocation()); } } }); mainSplitPane.addMouseMotionListener(new MouseMotionAdapter() { @Override public void mouseDragged(MouseEvent arg0) { if(objs.length == 1) { mainSplitPane.setDividerSize(0); mainSplitPane.setOneTouchExpandable(false); mainSplitPane.setDividerLocation(0); mainSplitPane.setDividerLocation(mainSplitPane.getDividerLocation()); } } }); } catch (Exception e) { e.printStackTrace(); mainSplitPane.setDividerSize(0); mainSplitPane.setOneTouchExpandable(false); mainSplitPane.setDividerLocation(0); JPanel pal = new JPanel(); JLabel lbl = new JLabel("加载模块面板出错!"); lbl.setForeground(Color.red); pal.add(lbl); rightScrollPane.getViewport().add(pal); } } private void loadRightPanel(SpecialRoleTreeClientObject specialRoleTreeClientObject){ LogonApplication.getUserEntityObject().setModules(specialRoleTreeClientObject.getNodeName()); selectedName = specialRoleTreeClientObject.getNodeName(); // rightScrollPane.getViewport().add((JPanel)getNewPanel(funcObj)); mainSplitPane.setRightComponent((JPanel)getNewPanel(specialRoleTreeClientObject)); } /** * 获取选中的模块名称 *

Description:

* * @author xf * @time 2012-6-3 * @return */ public String getSelectModuleName(){ return selectedName; } private Object getNewPanel(SpecialRoleTreeClientObject specialRoleTreeClientObject) { Object res = new VCIJPanel(); try { Class cls = Class.forName(specialRoleTreeClientObject.getPanelName()); try { res = cls.getConstructor(FunctionObject.class).newInstance(new FunctionObject()); } catch (NoSuchMethodException nse) { UIConstructorInterface instance = (UIConstructorInterface)cls.newInstance(); instance.init(); res = instance.start(); } } catch (SecurityException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); }catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (VCIError e) { e.printStackTrace(); } return res; } BaseMenuBar specialMenuBar = null; @Override public BaseMenuBar getSpecialMenuBar() { if(specialMenuBar == null){ specialMenuBar = new GenericMenuBar(LogonApplication.frame); } return specialMenuBar; } }