?? viewmanager.java
字號:
/*
* *****************************************************
* 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 + -