SWT browser与JDIC browser区别

4 篇文章 0 订阅

转载自:http://blog.csdn.net/youyigong/article/details/7073353

1.JDIC browser可以充分用到JavaSwing的组件。如果客户端的默认浏览器不是IE,它会报错,不会显示你想要的页面。

2.如果用SWT browser你会省事很多,但你需要把SWT的API翻过来,从头学习一遍。

JDIC源码:

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import javax.swing.event.*;
import java.awt.event.*;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

import org.jdesktop.jdic.browser.WebBrowser;
import org.jdesktop.jdic.desktop.DesktopException;

import com.ice.jni.registry.RegStringValue;
import com.ice.jni.registry.Registry;
import com.ice.jni.registry.RegistryException;
import com.ice.jni.registry.RegistryKey;

import JNIRegistry.CheckDefaultBrowserImpl;
import JNIRegistry.ICheckDefaultBrowser;
import JNIRegistry.SetDefaultBrowser;


public class BrowseTest implements ICheckDefaultBrowser{

	public BrowseTest(){
		
	}
	
	public static void main(String[] args) {
		try{
			BrowseTest browse = new BrowseTest();
			browse.setDefaultBrowser();
			WebBrowser browser = new WebBrowser();
			browser.setURL(new URL("http://waysame.8bbs.cn"));
			JFrame frame = new JFrame("同道中人");
			JButton button = new JButton("打开");
			frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			
			frame.getContentPane().add(button,BorderLayout.SOUTH);
			frame.getContentPane().add(browser);
			
			frame.pack();
			frame.setSize(500,500);
			frame.setVisible(true);
		}catch (IOException e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, "ddd");
		}
		catch(Exception e){
			JOptionPane.showMessageDialog(null, "ddd");
		}
		
	}
	
	public boolean setDefaultBrowser(){
		ICheckDefaultBrowser cdb = new CheckDefaultBrowserImpl();
		String browserPath = cdb.getDefaultBorserPath();
		//String sysDir =SystemTool.getOSRoot().toLowerCase().trim().substring(0, 1);
		//System.out.println("系统盘  "+sysDir);
		if(null != browserPath ){
			if(browserPath.toLowerCase().contains("iexplore.exe")){
				
			}else{
				System.out.println("ie不是默认浏览器");
				
				cdb.setDefaultBrowserPath("C:\\Program Files\\Internet Explorer\\iexplore.exe");
				System.out.println("C:\\Program Files\\Internet Explorer\\iexplore.exe");
				cdb.setDefaultBorwserName("IExplore");
				
			}
		}
			return  true;
		
	}
	public boolean  isDefaultIEBrowser(){
		ICheckDefaultBrowser cdb = new CheckDefaultBrowserImpl();
		String browserPath = cdb.getDefaultBorserPath();
		//String sysDir =SystemTool.getOSRoot().toLowerCase().trim().substring(0, 1);
		//System.out.println("系统盘  "+sysDir);
		if(null != browserPath ){
			if(browserPath.toLowerCase().equals("iexplorer.exe")){
				return true;
			}else{
				return false;
			}
			
		}else{
			return true;
		}

	}

	public String getDefaultBorserPath() {
		try {
			Registry registry = new Registry();
			registry.debugLevel=true;
			RegistryKey regkey = Registry.HKEY_CLASSES_ROOT;
			RegistryKey key =registry.openSubkey(regkey,"http\\shell\\open\\command",RegistryKey.ACCESS_ALL);
			
			RegStringValue stringValue = (RegStringValue)key.getValue("");
			return stringValue.getData();
			
			}
			catch(RegistryException ex) {
				ex.printStackTrace();
				return null;
			}
	}

	public String getDefaultBrowserName() {
		// TODO Auto-generated method stub
		try {
			Registry registry = new Registry();
			registry.debugLevel=true;
			RegistryKey regkey = Registry.HKEY_CLASSES_ROOT;
			RegistryKey key =registry.openSubkey(regkey,"http\\shell\\open\\ddeexec\\Application",RegistryKey.ACCESS_ALL);
			
			
			//I suppose there is a javaci value at Software\\Microsoft\\CurrentVersion\\Explorer\\Advanced  
			
//			RegStringValue stringValue = new RegStringValue(key,"b",RegistryValue.REG_SZ);
			RegStringValue stringValue = (RegStringValue)key.getValue("");
			System.out.println(stringValue.getData());
			return stringValue.getData();
			
			}
			catch(RegistryException ex) {
				ex.printStackTrace();
				return null;
			}
	}

	public void setDefaultBorwserName(String name) {
		try {
			Registry registry = new Registry();
			registry.debugLevel=true;
			RegistryKey regkey = Registry.HKEY_CLASSES_ROOT;
			RegistryKey key =registry.openSubkey(regkey,"http\\shell\\open\\ddeexec\\Application",RegistryKey.ACCESS_ALL);
			
			
			//I suppose there is a javaci value at Software\\Microsoft\\CurrentVersion\\Explorer\\Advanced  
			
//			RegStringValue stringValue = new RegStringValue(key,"b",RegistryValue.REG_SZ);
			RegStringValue stringValue = (RegStringValue)key.getValue("");
			stringValue.setData(name);
			key.setValue(stringValue);
			
			
			}
			catch(RegistryException ex) {
				ex.printStackTrace();
				
			}
	}

	public void setDefaultBrowserPath(String path) {
		try {
			Registry registry = new Registry();
			registry.debugLevel=true;
			RegistryKey regkey = Registry.HKEY_CLASSES_ROOT;
			RegistryKey key =registry.openSubkey(regkey,"http\\shell\\open\\command",RegistryKey.ACCESS_ALL);
			
			
			//I suppose there is a javaci value at Software\\Microsoft\\CurrentVersion\\Explorer\\Advanced  
			
//			RegStringValue stringValue = new RegStringValue(key,"b",RegistryValue.REG_SZ);
			RegStringValue stringValue = (RegStringValue)key.getValue("");
			stringValue.setData("\""+path+"\"");
			System.out.println(stringValue.getData());
			key.setValue(stringValue);
			
			}
			catch(RegistryException ex) {
				ex.printStackTrace();
				
			}
	}
}


SWT源码:
import java.io.IOException;
import java.io.InputStream;
import java.util.MissingResourceException;
import java.util.ResourceBundle;

import org.eclipse.swt.SWT;
import org.eclipse.swt.SWTError;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.browser.CloseWindowListener;
import org.eclipse.swt.browser.LocationEvent;
import org.eclipse.swt.browser.LocationListener;
import org.eclipse.swt.browser.OpenWindowListener;
import org.eclipse.swt.browser.ProgressEvent;
import org.eclipse.swt.browser.ProgressListener;
import org.eclipse.swt.browser.StatusTextEvent;
import org.eclipse.swt.browser.StatusTextListener;
import org.eclipse.swt.browser.TitleEvent;
import org.eclipse.swt.browser.TitleListener;
import org.eclipse.swt.browser.VisibilityWindowListener;
import org.eclipse.swt.browser.WindowEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
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.Canvas;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.ProgressBar;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;

public class SWTBrowserDemo {
  int index;

  boolean busy;

  Image images[];

  Image icon = null;

  boolean title = false;

  Composite parent;

  Text locationBar;

  Browser browser;

  ToolBar toolbar;

  Canvas canvas;

  ToolItem itemBack, itemForward;

  Label status;

  ProgressBar progressBar;

  SWTError error = null;

  static final String[] imageLocations = { "eclipse01.bmp", "eclipse02.bmp",
      "eclipse03.bmp", "eclipse04.bmp", "eclipse05.bmp", "eclipse06.bmp",
      "eclipse07.bmp", "eclipse08.bmp", "eclipse09.bmp", "eclipse10.bmp",
      "eclipse11.bmp", "eclipse12.bmp", };

  static final String iconLocation = "document.gif";

  public SWTBrowserDemo(Composite parent, boolean top) {
    this.parent = parent;
    try {
      browser = new Browser(parent, SWT.BORDER);
    } catch (SWTError e) {
      error = e;
      /* Browser widget could not be instantiated */
      parent.setLayout(new FillLayout());
      Label label = new Label(parent, SWT.CENTER | SWT.WRAP);
      label.setText(getResourceString("BrowserNotCreated"));
      parent.layout(true);
      return;
    }
    initResources();
    final Display display = parent.getDisplay();
    browser.setData(
        "org.eclipse.swt.examples.browserexample.BrowserApplication",
        this);
    browser.addOpenWindowListener(new OpenWindowListener() {
      public void open(WindowEvent event) {
        Shell shell = new Shell(display);
        if (icon != null)
          shell.setImage(icon);
        shell.setLayout(new FillLayout());
        SWTBrowserDemo app = new SWTBrowserDemo(shell, false);
        app.setShellDecoration(icon, true);
        event.browser = app.getBrowser();
      }
    });
    if (top) {
      browser.setUrl(getResourceString("http://waysame.8bbs.cn"));
      show(false, null, null, true, true, true, true);
    } else {
      browser.addVisibilityWindowListener(new VisibilityWindowListener() {
        public void hide(WindowEvent e) {
        }

        public void show(WindowEvent e) {
          Browser browser = (Browser) e.widget;
          SWTBrowserDemo app = (SWTBrowserDemo) browser
              .getData("org.eclipse.swt.examples.browserexample.BrowserApplication");
          app.show(true, e.location, e.size, e.addressBar, e.menuBar,
              e.statusBar, e.toolBar);
        }
      });
      browser.addCloseWindowListener(new CloseWindowListener() {
        public void close(WindowEvent event) {
          Browser browser = (Browser) event.widget;
          Shell shell = browser.getShell();
          shell.close();
        }
      });
    }
  }

  /**
   * Disposes of all resources associated with a particular instance of the
   * BrowserApplication.
   */
  public void dispose() {
    freeResources();
  }

  /**
   * Gets a string from the resource bundle. We don't want to crash because of
   * a missing String. Returns the key if not found.
   */
  static String getResourceString(String key) {
      return key;
  }

  public SWTError getError() {
    return error;
  }

  public Browser getBrowser() {
    return browser;
  }

  public void setShellDecoration(Image icon, boolean title) {
    this.icon = icon;
    this.title = title;
  }

  void show(boolean owned, Point location, Point size, boolean addressBar,
      boolean menuBar, boolean statusBar, boolean toolBar) {
    final Shell shell = browser.getShell();
    if (owned) {
      if (location != null)
        shell.setLocation(location);
      if (size != null)
        shell.setSize(shell.computeSize(size.x, size.y));
    }
    FormData data = null;
    if (toolBar) {
      toolbar = new ToolBar(parent, SWT.NONE);
      data = new FormData();
      data.top = new FormAttachment(0, 5);
      toolbar.setLayoutData(data);
      itemBack = new ToolItem(toolbar, SWT.PUSH);
      itemBack.setText(getResourceString("后退"));
      itemForward = new ToolItem(toolbar, SWT.PUSH);
      itemForward.setText(getResourceString("前进"));
      final ToolItem itemStop = new ToolItem(toolbar, SWT.PUSH);
      itemStop.setText(getResourceString("停止"));
      final ToolItem itemRefresh = new ToolItem(toolbar, SWT.PUSH);
      itemRefresh.setText(getResourceString("刷新"));
      final ToolItem itemGo = new ToolItem(toolbar, SWT.PUSH);
      itemGo.setText(getResourceString("转到"));

      itemBack.setEnabled(browser.isBackEnabled());
      itemForward.setEnabled(browser.isForwardEnabled());
      Listener listener = new Listener() {
        public void handleEvent(Event event) {
          ToolItem item = (ToolItem) event.widget;
          if (item == itemBack)
            browser.back();
          else if (item == itemForward)
            browser.forward();
          else if (item == itemStop)
            browser.stop();
          else if (item == itemRefresh)
            browser.refresh();
          else if (item == itemGo)
            browser.setUrl(locationBar.getText());
        }
      };
      itemBack.addListener(SWT.Selection, listener);
      itemForward.addListener(SWT.Selection, listener);
      itemStop.addListener(SWT.Selection, listener);
      itemRefresh.addListener(SWT.Selection, listener);
      itemGo.addListener(SWT.Selection, listener);

      canvas = new Canvas(parent, SWT.NO_BACKGROUND);
      data = new FormData();
      data.width = 24;
      data.height = 24;
      data.top = new FormAttachment(0, 5);
      data.right = new FormAttachment(100, -5);
      canvas.setLayoutData(data);

      final Rectangle rect = images[0].getBounds();
      canvas.addListener(SWT.Paint, new Listener() {
        public void handleEvent(Event e) {
          Point pt = ((Canvas) e.widget).getSize();
          e.gc.drawImage(images[index], 0, 0, rect.width,
              rect.height, 0, 0, pt.x, pt.y);
        }
      });
      canvas.addListener(SWT.MouseDown, new Listener() {
        public void handleEvent(Event e) {
          browser.setUrl(getResourceString("http://waysame.8bbs.cn"));
        }
      });

      final Display display = parent.getDisplay();
      display.asyncExec(new Runnable() {
        public void run() {
          if (canvas.isDisposed())
            return;
          if (busy) {
            index++;
            if (index == images.length)
              index = 0;
            canvas.redraw();
          }
          display.timerExec(150, this);
        }
      });
    }
    if (addressBar) {
      locationBar = new Text(parent, SWT.BORDER);
      data = new FormData();
      if (toolbar != null) {
        data.top = new FormAttachment(toolbar, 0, SWT.TOP);
        data.left = new FormAttachment(toolbar, 5, SWT.RIGHT);
        data.right = new FormAttachment(canvas, -5, SWT.DEFAULT);
      } else {
        data.top = new FormAttachment(0, 0);
        data.left = new FormAttachment(0, 0);
        data.right = new FormAttachment(100, 0);
      }
      locationBar.setLayoutData(data);
      locationBar.addListener(SWT.DefaultSelection, new Listener() {
        public void handleEvent(Event e) {
          browser.setUrl(locationBar.getText());
        }
      });
    }
    if (statusBar) {
      status = new Label(parent, SWT.NONE);
      progressBar = new ProgressBar(parent, SWT.NONE);

      data = new FormData();
      data.left = new FormAttachment(0, 5);
      data.right = new FormAttachment(progressBar, 0, SWT.DEFAULT);
      data.bottom = new FormAttachment(100, -5);
      status.setLayoutData(data);

      data = new FormData();
      data.right = new FormAttachment(100, -5);
      data.bottom = new FormAttachment(100, -5);
      progressBar.setLayoutData(data);

      browser.addStatusTextListener(new StatusTextListener() {
        public void changed(StatusTextEvent event) {
          status.setText(event.text);
        }
      });
    }
    parent.setLayout(new FormLayout());

    Control aboveBrowser = toolBar ? (Control) canvas
        : (addressBar ? (Control) locationBar : null);
    data = new FormData();
    data.left = new FormAttachment(0, 0);
    data.top = aboveBrowser != null ? new FormAttachment(aboveBrowser, 5,
        SWT.DEFAULT) : new FormAttachment(0, 0);
    data.right = new FormAttachment(100, 0);
    data.bottom = status != null ? new FormAttachment(status, -5,
        SWT.DEFAULT) : new FormAttachment(100, 0);
    browser.setLayoutData(data);

    if (statusBar || toolBar) {
      browser.addProgressListener(new ProgressListener() {
        public void changed(ProgressEvent event) {
          if (event.total == 0)
            return;
          int ratio = event.current * 100 / event.total;
          if (progressBar != null)
            progressBar.setSelection(ratio);
          busy = event.current != event.total;
          if (!busy) {
            index = 0;
            if (canvas != null)
              canvas.redraw();
          }
        }

        public void completed(ProgressEvent event) {
          if (progressBar != null)
            progressBar.setSelection(0);
          busy = false;
          index = 0;
          if (canvas != null) {
            itemBack.setEnabled(browser.isBackEnabled());
            itemForward.setEnabled(browser.isForwardEnabled());
            canvas.redraw();
          }
        }
      });
    }
    if (addressBar || statusBar || toolBar) {
      browser.addLocationListener(new LocationListener() {
        public void changed(LocationEvent event) {
          busy = true;
          if (event.top && locationBar != null)
            locationBar.setText(event.location);
        }

        public void changing(LocationEvent event) {
        }
      });
    }
    if (title) {
      browser.addTitleListener(new TitleListener() {
        public void changed(TitleEvent event) {
          shell.setText(event.title + " - "
              + getResourceString("同道中人"));
        }
      });
    }
    parent.layout(true);
    if (owned)
      shell.open();
  }

  /**
   * Grabs input focus.
   */
  public void focus() {
    if (locationBar != null)
      locationBar.setFocus();
    else if (browser != null)
      browser.setFocus();
    else
      parent.setFocus();
  }

  /**
   * Frees the resources
   */
  void freeResources() {
    if (images != null) {
      for (int i = 0; i < images.length; ++i) {
        final Image image = images[i];
        if (image != null)
          image.dispose();
      }
      images = null;
    }
  }

  /**
   * Loads the resources
   */
  void initResources() {
    final Class clazz = this.getClass();
      try {
        if (images == null) {
          images = new Image[imageLocations.length];
          for (int i = 0; i < imageLocations.length; ++i) {
            InputStream sourceStream = clazz
                .getResourceAsStream(imageLocations[i]);
            ImageData source = new ImageData(sourceStream);
            ImageData mask = source.getTransparencyMask();
            images[i] = new Image(null, source, mask);
            try {
              sourceStream.close();
            } catch (IOException e) {
              e.printStackTrace();
            }
          }
        }
        return;
      } catch (Throwable t) {
      }
    String error = "Unable to load resources";
    freeResources();
    throw new RuntimeException(error);
  }

  public static void main(String[] args) {
    Display display = new Display();
    Shell shell = new Shell(display);
    shell.setLayout(new FillLayout());
    shell.setText(getResourceString("同道中人"));
    InputStream stream = SWTBrowserDemo.class
        .getResourceAsStream(iconLocation);
    Image icon = new Image(display, stream);
    shell.setImage(icon);
    try {
      stream.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
    SWTBrowserDemo app = new SWTBrowserDemo(shell, true);
    app.setShellDecoration(icon, true);
    shell.open();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch())
        display.sleep();
    }
    icon.dispose();
    app.dispose();
    display.dispose();
  }
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值