package com.vci.client.logon.base; import java.awt.Component; import java.util.Iterator; import java.util.Map; import com.vci.client.ui.swing.components.CloseEvent; import com.vci.client.ui.swing.components.CloseListenerAdapter; import com.vci.client.ui.swing.components.JClosableTabbedPane; import com.vci.client.ui.swing.components.TabTitleComponent; import com.vci.client.uif.engine.client.IRegionPanel; import com.vci.client.uif.engine.client.UILayoutPanel; import com.vci.client.uif.engine.client.TreeTable.TreeTablePanel; import com.vci.client.uif.engine.client.mainDataArea.MainDataFormPanel; import com.vci.client.uif.engine.client.tableArea.TablePanel; import com.vci.client.uif.engine.client.tree.TreePanel; import com.vci.mw.ClientContextVariable; public class TabPanelManage { private static TabPanelManage instance = null; private JClosableTabbedPane mainTabPanel = null; public static synchronized TabPanelManage getInstance() { if (instance == null) { instance = new TabPanelManage(); } return instance; } public void setTabPanel(JClosableTabbedPane tabPanel) { mainTabPanel = tabPanel; } /** * 增加新的tabPanel * @param component * @param title */ public void addTabPanel(Component component, String title) { this.addTabPanel(component, title, false); } /** * 增加新的tabPanel * @param component 组件对象 * @param title 标题 * @param override 是否覆盖(标题名称相同才覆盖) */ public void addTabPanel(Component component, String title, boolean override) { boolean titleIsExist = isTabPanelExist(title); if(titleIsExist && override){ int index = getComponentIndex(title); mainTabPanel.setComponentAt(index, component); } else { mainTabPanel.addTab(title, component, true); mainTabPanel.setSelectedComponent(component); mainTabPanel.updateUI(); // 注册关闭前、后事件处理 mainTabPanel.addCloseListener(new CloseListenerAdapter() { @Override public void afterClosed(CloseEvent e) { releaseUILayoutPanel(e); } }); } } /** * 在关闭UILayoutPanel时,释放TablePanel产生的线程(池) */ private void releaseUILayoutPanel(CloseEvent e){ if(e.getSource() instanceof JClosableTabbedPane){ Component compt = e.getTabComponent(); if(compt == null) return; if(!(compt instanceof TabTitleComponent)) return; TabTitleComponent tabTitleCompt = (TabTitleComponent) compt; Component tabCompt = tabTitleCompt.getTabComponent(); if(tabCompt == null) return; if(!(tabCompt instanceof UILayoutPanel)) return; UILayoutPanel uipl = (UILayoutPanel)tabCompt; releaseUILayoutPanel(uipl); } } private void releaseUILayoutPanel(UILayoutPanel uipl){ Map regionPanelMap = uipl.getRegionPanelMap(); Iterator its = regionPanelMap.keySet().iterator(); while(its.hasNext()){ String key = its.next(); IRegionPanel regionPanel = regionPanelMap.get(key); if(regionPanel == null) continue; if(regionPanel instanceof TreePanel){ repleaseTreePanel((TreePanel)regionPanel); } else if(regionPanel instanceof MainDataFormPanel){ repleaseMainDataFormPanel((MainDataFormPanel)regionPanel); } else if(regionPanel instanceof TablePanel){ repleaseTablePanel((TablePanel)regionPanel); } else if(regionPanel instanceof TreeTablePanel){ repleaseTreeTablePanel((TreeTablePanel)regionPanel); } } } private void repleaseTreePanel(TreePanel treePanel){ //TODO release in here } private void repleaseMainDataFormPanel(MainDataFormPanel treePanel){ //TODO release in here } private void repleaseTablePanel(TablePanel tablePanel){ if(tablePanel != null && tablePanel.getDataTablePanel() != null){ tablePanel.getDataTablePanel().shutdownThreadPool(); } } private void repleaseTreeTablePanel(TreeTablePanel treeTablePanel){ //TODO release in here } /** * 根据名称判断title是否存储,如果存在则选中并返回true * @param title * @return */ public boolean isTabPanelExist(String title) { int count = mainTabPanel.getTabCount(); for (int i = 0; i < count; i++) { if (mainTabPanel.getTitleAt(i).equals(title)) { mainTabPanel.setSelectedIndex(i); return true; } } return false; } /** * 获取指定标题组件的索引 * @param title * @return */ public int getComponentIndex(String title){ int index = -1; int count = mainTabPanel.getTabCount(); for (int i = 0; i < count; i++) { if (mainTabPanel.getTitleAt(i).equals(title)) { index = i; break; } } return index; } /** * 返回主体框架顶层的TabbedPane * @return */ public JClosableTabbedPane getTabPanel(){ return mainTabPanel; } }