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

📄 sqtbrowser.java

📁 用java写的一个浏览器
💻 JAVA
字号:
package demo;

import java.util.HashMap;

import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.browser.CloseWindowListener;
import org.eclipse.swt.browser.TitleEvent;
import org.eclipse.swt.browser.TitleListener;
import org.eclipse.swt.browser.WindowEvent;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.CTabItem;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;


public class SQTBrowser extends Shell {
	protected HashMap<CTabItem, Browser> browserHM = new HashMap<CTabItem, Browser>();
	protected Browser currentBrowser = null;
	
	/**
	 * Launch the application
	 * @param args
	 */
	public static void main(String args[]) {
		try {
			Display display = Display.getDefault();
			SQTBrowser shell = new SQTBrowser(display, SWT.SHELL_TRIM);
			shell.open();
			shell.layout();
			while (!shell.isDisposed()) {
				if (!display.readAndDispatch())
					display.sleep();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * Create the shell
	 * @param display
	 * @param style
	 */
	public SQTBrowser(Display display, int style) {
		super(display, style);
		createContents();
	}

	/**
	 * Create contents of the window
	 */
	protected void createContents() {
		setText("SWT Application");
		setSize(568, 441);
		//
		
		final Composite compositeLeft;
		compositeLeft = new Composite(this, SWT.None);
		compositeLeft.setBackground(new Color(null, 255, 255, 255));

		compositeLeft.setLayout(new FormLayout());
		final FormData formData_1 = new FormData();
		formData_1.bottom = new FormAttachment(300, 150);
		formData_1.top = new FormAttachment(0, 150);
		formData_1.right = new FormAttachment(150, 300);
		formData_1.left = new FormAttachment(150, 0);
		compositeLeft.setLayoutData(formData_1);
		
		CTabFolder myTabFolder = new CTabFolder(compositeLeft, SWT.None);
		myTabFolder.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE));
		myTabFolder.setSelectionBackground(
				new Color[] {
						Display.getDefault().getSystemColor(SWT.COLOR_TITLE_BACKGROUND), 
						Display.getDefault().getSystemColor(SWT.COLOR_TITLE_BACKGROUND_GRADIENT), 
						Display.getDefault().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND)}, 
				new int[] {50, 100}, 
				true);
		
		myTabFolder.setBorderVisible(true);
		myTabFolder.setSelectionForeground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE));
		myTabFolder.addSelectionListener(new SelectionAdapter() {
			public void widgetSelected(final SelectionEvent e) {
				selectBrowserTabFolderWidgetSelected(e);
			}
		});
		createBrowserTab(myTabFolder,"http://www.baidu.com");
	}
	
	public void createBrowserTab( final CTabFolder tabFolder, String tabUrl ) {
		final CTabItem browserTabItem = new CTabItem(tabFolder, SWT.BORDER|SWT.CLOSE);
		browserTabItem.setText("正在打开...");
		if ( Display.getDefault()!=null ) {
			browserTabItem.setImage(DmStandard.getInterfaceImage(Display.getDefault(), "ie6.ico"));
		}
		final Composite composite = new Composite(tabFolder, SWT.BORDER);
		composite.setLayout(new FillLayout());
		browserTabItem.setControl(composite);
		final Browser browser = new Browser(composite, SWT.NONE);

		if (tabUrl!=null){
			browser.setUrl(tabUrl);
		}
		browserHM.put(browserTabItem, browser);
		initialize(tabFolder, browserTabItem, browser);
	}
	private void initialize(final CTabFolder tabFolder, final CTabItem cti, final Browser browser) {
		//选中刚创建的标签
		tabFolder.setSelection(cti);

		/**
		 * 设置当前浏览器
		 */
		currentBrowser = browser;
		/**
		 * 监听双击关闭标签页
		 */
		tabFolder.addMouseListener(new MouseAdapter() {
			public void mouseDoubleClick(final MouseEvent e) {
				Point point = new Point(e.x, e.y);
				CTabItem cti = tabFolder.getItem(point);
				if (cti!=null && e.button==1 && !cti.isDisposed())
					cti.dispose();
			}
		});
		/**
		 * 监听标签页 CTabItem Dispose() 事件
		 */
		cti.addDisposeListener(new DisposeListener() {
			public void widgetDisposed(final DisposeEvent e) {
				cTabItemDisposeHandler(e);
			}
		});

		/**
		 * 监听浏览器关闭事件(此事件一般由网页关闭代码触发)
		 */
		browser.addCloseWindowListener(new CloseWindowListener() {
			public void close(WindowEvent event) {
				int idx = tabFolder.getSelectionIndex();
				if (idx >= 0){
					System.out.println("close tab " + idx + ".");
					tabFolder.getItem(idx).dispose();
				}
			}
		});
		
		//监听新开标签页标题事件
		browser.addTitleListener(new TitleListener() {
			public void changed(TitleEvent event) {
				browserTitleChangeHandler(cti, event);
			}
		});
		/**
		 * 监听 _blank 网页弹出事件
		 */
		browser.addOpenWindowListener(new org.eclipse.swt.browser.OpenWindowListener() {
				public void open(final org.eclipse.swt.browser.WindowEvent e) {
						final CTabItem newTabItem = new CTabItem(tabFolder,
								SWT.BORDER|SWT.CLOSE);
						final Browser browser = new Browser(tabFolder, SWT.NONE);
						newTabItem.setControl(browser);
						
						initialize(tabFolder, newTabItem, browser);
						e.browser = browser;
						
						/**///检测此URL是否已打开,如果是,则关闭刚刚建立的新标签,并定位到存在url对应的TAB标签上
						e.display.asyncExec(new Runnable() {
							public void run() {								
									browserHM.put(newTabItem, browser);
							}
						});
				}
		});
	}
	
	/**
	 * 监听标签页 CTabItem Dispose() 事件
	 */
    private void cTabItemDisposeHandler(final DisposeEvent e){
    	try{
	    	CTabItem cti = (CTabItem)e.widget;
	    	//首先将此销毁的CTabItem和Browser从HashMap中移除
	    	browserHM.remove(cti);
	    	CTabFolder ctf = (CTabFolder)cti.getParent();
	    	//判断如果当前频道没有浏览器时则将导航按钮禁用
	    	if (ctf.getItemCount()==0){	    		
	    	}
	    	//关掉与此标签相关的Composite和Browser
			Composite c = (Composite)cti.getControl();
			if (!c.isDisposed()){
				Control cl = c.getChildren()[0];
				if (!cl.isDisposed()) {
					cl.dispose();
					cl=null;
				}
				if (!c.isDisposed())c.dispose();
				if (!cti.isDisposed())cti.dispose();
			}
			//有标签被关闭时,获取当前选中的标签,得到当前浏览器
			cti = ctf.getSelection();
			if ( cti!=null && !cti.isDisposed() ) {
				//Browser b =(Browser)((Composite)cti.getControl()).getChildren()[0];
				Browser b = browserHM.get(cti);
				if ( b!=null ) {
	    			currentBrowser = b;
	    		}
			}
    	} catch (ClassCastException cce){
    		cce.printStackTrace();
    	} catch(Exception ex){
    		ex.printStackTrace();
    	}
    }
    /**
	 * 监听标签页标题事件
	 */
    private void browserTitleChangeHandler(CTabItem browserTabItem, TitleEvent event){
		if ( browserTabItem != null && !browserTabItem.isDisposed() ) {
			browserTabItem.setText(cutTitle(event.title));
			browserTabItem.setToolTipText(event.title);
		}
    }
    private String cutTitle(String title) {
		String newTitle = title;
		if (title.length() > 10) {
			newTitle = title.substring(0, 10) + "...";
		}
		return newTitle;
	}
	
	/**
     * 点击CTabItem时
     * @param e
     */
    private void selectBrowserTabFolderWidgetSelected(final SelectionEvent e){
    	try{
    		//根据所点击的CTabItem获取相应的Browser,然后设置为当前浏览器
    		Browser b = null;
    		CTabItem cti = ((CTabFolder)e.widget).getSelection();
    		if ( cti!=null && !cti.isDisposed() ) {
    			b = browserHM.get(cti);
    		}
    		if ( b!=null && !b.isDisposed() ) {
    			currentBrowser = b;    			
    		}
		} catch (ClassCastException cce){
			cce.printStackTrace();
		}
    }

	@Override
	protected void checkSubclass() {
		// Disable the check that prevents subclassing of SWT components
	}

}

⌨️ 快捷键说明

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