⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 viewmanager.java

📁 用来为垂直搜索引擎抓取数据的采集系统
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*
 * *****************************************************
 * Copyright (c) 2005 IIM Lab. All  Rights Reserved.
 * Created by xuehao at 2005-10-12
 * Contact: zxuehao@mail.ustc.edu.cn
 * *****************************************************
 */

package org.indigo.gui;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JToolBar;
import javax.swing.JTree;
import javax.swing.table.DefaultTableModel;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeSelectionModel;

import org.indigo.commands.CompositeCommand;
import org.indigo.commands.RawCommand;
import org.indigo.gui.actions.AddressKeyAction;
import org.indigo.gui.actions.TabPopupAction;
import org.indigo.gui.actions.TableAction;
import org.indigo.gui.actions.TreePopupAction;
import org.indigo.gui.actions.RunAction;
import org.indigo.gui.actions.WebBrowserButtonAction;
import org.indigo.util.TaskProperties;
import org.jdesktop.jdic.browser.WebBrowser;
import org.jdesktop.jdic.browser.WebBrowserEvent;
import org.jdesktop.jdic.browser.WebBrowserListener;

/**
 * 负责整个可视化界面的
 * 管理工作,如一个标签的插入,另一个标签的删除等。
 * @author wbz
 *
 */
public class ViewManager
{
    private static ViewManager itsInstance=new ViewManager();
    
    private JPanel itsMainPanel=null;
    private JTabbedPane itsTabbedPane=null;

    private HashMap itsTableMap=null;
    private JTable itsTable=null;
    
//    private HashMap itsTableModelMap=null;
//    private DefaultTableModel itsTableModel=null;

    private JTree itsTree=null;
  
//    private DefaultTreeModel itsTreeModel=null;
    private DefaultMutableTreeNode itsRoot=null;
    
    private  WebBrowser itsWebBrowser=null;

    private HashMap itsProcessMap=null;
    /**
     * 构造函数,负责初始化
     * 如一个JTabbedPane实例的初始化。
     *
     */
    private ViewManager()
    {
        itsTableMap = new HashMap();
        itsProcessMap = new HashMap();
        itsTabbedPane = new JTabbedPane();
//        itsRoot = new DefaultMutableTreeNode("抓取规则集合");
//        itsTreeModel = new DefaultTreeModel( itsRoot );
    }
    /**
     * 利用了单例模式,使整个采集程序运行期间
     * 只有一个ViewManager实例存在。
     * @return
     */
    public static ViewManager getInstance()
    {
        return itsInstance;
    }
    /**
     * itsProcessMap存放标签的显示记录,
     * 如果该标签在界面中显示时则在itsProcessMap中存放
     *  itsProcessMap.put( key, new Boolean(val) );
     *  通过getProcessMap可以获得,标签的显示记录。
     * @return
     */
    public HashMap getProcessMap()
    {
        return itsProcessMap;
    }
    /**
     * 通过key值检验指定名的标签是否已经存在
     * 如果存在返回true
     * 否则false
     * @param key
     * @return
     */
    public boolean checkInTab( String key )
    {
        int i;
        i = key.lastIndexOf( "/" );
        if( i!=-1 )
            key = key.substring( i+1 ); 
        Boolean val=null;
        val = (Boolean) itsProcessMap.get( key );
        if( val==null )
            return false;
        else
            return true;
    }
    /**
     * 把指定的标签送入主界面中显示,
     * @param key
     * @param val
     */
    public void putInTab( String key, boolean val )
    {
//        System.out.println( "macro_put key="+key );
        
        String file = "./taskconfig/" + key + ".task";
        
        TaskProperties props = new TaskProperties();
        props.open( file );
        boolean bComp=false;
        String str = props.getProperty( "Nested" );
        if( str==null )
            bComp = false;
        else
        if(  str.equalsIgnoreCase("true")  )
            bComp = true;
        else
            bComp = false;
        
        if( !bComp )
        {
            int i1,j1;
            i1 = file.lastIndexOf( "/" );
            j1 = file.lastIndexOf( "." );
            if( !(i1==-1) && !(j1==-1) )
                key = file.substring( i1+1, j1 );
            
            itsProcessMap.put( key, new Boolean(val) );
//            System.out.println( " real_put1 key="+key );
        }else
        {
            String taskName;
            int taskCount,i;
            taskCount = Integer.parseInt( props.getProperty( "TaskCount" ) );
            for( i=0; i<taskCount; i++ )
            {
                taskName = props.getProperty( "Task"+(i+1) );
                TaskProperties props2 = new TaskProperties();
                props2.open( taskName );
                bComp = props2.getProperty( "Nested" ).equalsIgnoreCase("true");
                if( !bComp )
                {
                    int i1,j1;
                    i1 = taskName.lastIndexOf( "/" );
                    j1 = taskName.lastIndexOf( "." );
                    key = taskName.substring( i1+1, j1 );
                    itsProcessMap.put( key, new Boolean(val) );
//                    System.out.println( " real_put2 key="+key );
                }else
                {
                    String subTaskName;
                    boolean bComp3=false;
                    TaskProperties props3 = new TaskProperties();
                    props3.open( taskName );
                    int count=0;
                    count = Integer.parseInt( props.getProperty( "TaskCount" ) );
                    for( int j=0; j<count; j++ )
                    {
                        subTaskName = props.getProperty( "Task"+(i+1) );
//                        System.out.println( "here1>>>"+subTaskName );
                        int subi,subj;
                        String str3="taskconfig/";
                        subi = subTaskName.indexOf( str3 );
                        subj = subTaskName.lastIndexOf( "." );
                        subTaskName = subTaskName.substring( subi+str3.length(), subj );
//                        System.out.println( "here2>>>"+subTaskName );
                        putInTab( subTaskName, val );
                    }
                }
            }        
        }
    }
    /**
     * 根据标签名,移除指定标签。
     * @param key
     */
    public void removeInTab( String key )
    {
        System.out.println( " real_remove key="+key );
        itsProcessMap.remove( key );
    }
    /**
     * 获取放置标签的面板。
     * @return
     */
    public JTabbedPane getTabbedPane()
    {
        return itsTabbedPane;
    }
    /**
     * 获取在主界面左侧的结构树。
     * @return
     */
    public JTree getTree()
    {
        return itsTree;
    }
    /**
     * 获取含有指定标题的表格。
     * @param title
     * @return
     */
    public JTable getTable( String title )
    {
//        System.out.println( "will get="+title );
      
        itsTable = (JTable) itsTableMap.get( title );
        return itsTable;
    }
    /**
     * 获取树的根目录。
     * @return
     */
    public DefaultMutableTreeNode getTreeRoot()
    {
        return itsRoot;
    }
    /**
     * 获取选定的结点
     * @return
     */
    public String getTreeSelectNode()
    {
        String file=null;

        return file;
    }
    /**
     * 获取指定索引的标签。
     * @param index
     */
    public void removeTabbedPane( int index )
    {
        if( index< ViewManager.getInstance().getTabbedPane().getTabCount() )
            ViewManager.getInstance().getTabbedPane().remove( index );
    }
    private TableAction itsTableAction=new TableAction();
    /**
     * 当启动一个任务时,此函数用于根据指定的任务名,生成一个用于显示此任务所采集到数据的
     * 表格,然后添加到主界面中。
     * @param tabName
     */
    public void addTabbedPane( String tabName )
    {
        JTable table=null;
        table = new JTable();
        
        table.addMouseListener( itsTableAction );
        
        DefaultTableModel model = new DefaultTableModel();
//        System.out.println( "will put="+tabName );
        itsTableMap.put( tabName, table );
        table.setModel( model );
        table.setPreferredScrollableViewportSize(new Dimension(500, 70));

        JScrollPane scrollPane = new JScrollPane( table );
        scrollPane.setBounds( 0, 0, 400, 400 );
        
        ViewManager.getInstance().getTabbedPane().add( tabName, scrollPane );
    }
    /**
     * 获取table指定的表格的指定的行和列的数据。
     * @param table
     * @param row
     * @param col
     * @return
     */
    public String getTableDetail( JTable table, int row, int col )
    {
        int rowCnt, colCnt;
        rowCnt = table.getRowCount();
        colCnt = table.getColumnCount();
        
        if( row>rowCnt || col>colCnt || row<0 || col<0 )
            return null;
        
        String str;
        str = table.getModel().getValueAt( row, col ).toString();
        return str;
    }
    public JButton getGoButton()
    {
        return itsGo;
    }
    public JButton getBackButton()
    {
        return itsBack;
    }
    public JButton getForwardButton()
    {
        return itsForward;
    }
    public JButton getStopButton()
    {
        return itsStop;
    }
    public JButton getSourceButton()
    {
        return itsSource;
    }
    public JButton getHomeButton()
    {
        return itsHome;
    }
    public JTextField getWebAddressField()
    {
        return itsField;
    }
    private JButton itsGo=null,itsBack=null,itsForward=null,itsStop=null,itsSource=null;
    private JButton itsHome=null;
    private JTextField itsField=null;

    public void addDefaultPane( String tabName )

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -