DJNativeSwing:java内嵌浏览器的常用方法
最近用到了java内嵌浏览器DJNativeSwing,在此总结一下DJNativeSwing的常用方法,方便将来查找使用,如有不足欢迎批评指正。
1.需要的jar包:
DJNativeSwing.jar
DJNativeSwing-SWT.jar
swt-4.3-win32-win32-x86-1.7.0_11-b21.jar
2.用到的import语句:
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import chrriis.dj.nativeswing.swtimpl.components.JWebBrowser;
import chrriis.dj.nativeswing.swtimpl.components.WebBrowserFunction;
3.创建java浏览器窗口的相关方法:
(1)创建一个类,继承JFrame
(2)在这个类中创建一个方法,使用以下语句进行窗口相关设置:
//窗口标题
this.setTitle("我的浏览器窗口");
//窗口大小
this.setSize(1400, 700);
//点击窗口右上角自带的关闭按钮后,调用任意已注册 WindowListener 的对象后自动隐藏并释放该窗体
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
//注册窗口关闭事件监听器(可自定义窗口关闭事件)
this.addWindowListener(new WindowAdapter()
{
@Override
public void windowClosed(WindowEvent event)
{
//关闭窗口
super.windowClosed(event);
}
});
/*------------------------------------------------------------*/
//创建JWebBrowser对象
JWebBrowser webBrowser = new JWebBrowser(JWebBrowser.destroyOnFinalization());
//设置为不显示菜单
webBrowser.setMenuBarVisible(false);
//在JFrame的中间添加JWebBrowser对象
this.add(webBrowser, BorderLayout.CENTER);
//创建JWebBrowser需要的自定义监听器对象
//(实际上WebBrowserAdapter类实现了WebBrowserListener接口,可以新建类继承WebBrowserAdapter,重写相应方法,之后注册,实现自定义监听)
WebBrowserAdapter adapter = new WebBrowserAdapter();
//注册这个监听器
webBrowser.addWebBrowserListener(adapter);
/*------------------------------------------------------------*/
//以下是通过注册自定义方法webBrowser.registerFunction()实现重写js方法
try
{
//该方法是为了避免在EDT中执行长时间的操作导致页面卡住,将一个任务放到EDT线程中,EDT会在适当的时候进行调用。
//与invoikeLater的相同点:都可以把可运行对象排入事件派发线程的队列中。
//不同点:invokeLater在把可运行的对象放入队列后就返回,而invokeAndWait一直等待知道已启动了可运行的run方法才返回。
SwingUtilities.invokeAndWait(new Runnable()
{
@Override
public void run()
{
//注册自定义方法"alert"
webBrowser.registerFunction(new WebBrowserFunction("alert")
{
@Override
public Object invoke(JWebBrowser arg0, Object... arg1)
{
System.out.println("jwebBrowser弹出alert框,内容是:" + arg1[0] + "");
return null;
}
});
//注册自定义方法"confirm"
webBrowser.registerFunction(new WebBrowserFunction("confirm")
{
@Override
public Object invoke(JWebBrowser arg0, Object... arg1)
{
System.out.println("webBrowser弹出confirm框:" + providerCode + "");
return null;
}
});
}
});
}
catch (InterruptedException e)
{
e.printStackTrace();
}
catch (InvocationTargetException e)
{
e.printStackTrace();
}
/*------------------------------------------------------------*/
//创建面板容器对象jPanel,居中
JPanel jPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
//创建按钮对象,传入按钮名
JButton jButton = new JButton("我的按钮");
//按钮大小
jButton.setSize(50, 20);
//在jPanel中添加按钮
jPanel.add(jButton, BorderLayout.WEST);
//在按钮上注册监听器
jButton.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
System.out.println("点击按钮后输入这句话");
}
});
/*------------------------------------------------------------*/
//设置为可见
this.setVisible(true);
//总是置顶
this.setAlwaysOnTop(true);
//显示在前方
this.toFront();
(3)创建这个类的对象,就可以看到java浏览器窗口了。
(4)补充:
还有一个使用@PostConstruct注解配置的方法,会在Servlet初始化后、init方法前执行。在一个@Component("DJNative")标注的自己创建的类DJNative.java中。
@PostConstruct
public void initNativeSwing() {
System.out.println("DJNativeSwing-setPreferredLookAndFeel");
UIUtils.setPreferredLookAndFeel();
System.out.println("DJNativeSwing-open");
NativeInterface.open();
System.out.println("DJNativeSwing初始化成功");
}
也就是说,在创建这个类的对象之前,要执行NativeInterface.open();方法,不然会报错。例如:
public static void main(String[] args) { //UIUtils.setPreferredLookAndFeel(); NativeInterface.open(); //创建继承JFrame类的View类对象 new View(); }
4.JWebBrowser常用方法:
//创建JWebBrowser对象
JWebBrowser webBrowser = new JWebBrowser(JWebBrowser.destroyOnFinalization());
//导航到指定网址
webBrowser.navigate("www.baidu.com");
//传入自定义html文本
webBrowser.setHTMLContent("<html><span>我是自定义HTML</span></html>
//执行js方法
webBrowser.executeJavascript("console.log('我是js')");
//执行js方法,有返回值
webBrowser.executeJavascriptWithResult("console.log('我是js')");
//源码中获取cookie信息的方法
public static String getCookie(String url, String name) {
return webBrowserStatic.getCookie(url, name);
}
//实际获取cookie信息的方法
SwingUtilities.invokeAndWait(new Runnable()
{
@Override
public void run( )
{
String cookieValue = webBrowser.getCookie(webBrowser.getResourceLocation(), cookieName);
}
});
//源码中设置cookie信息的方法
public static void setCookie(String url, String value) {
webBrowserStatic.setCookie(url, value);
}
5.WebBrowserEvent常用方法,该对象在JWebBrowser的监听器中出现
//监听器中的对象
WebBrowserEvent e;
//得到页面加载进度,100时加载完毕
e.getWebBrowser().getLoadingProgress() == 100
6.js常用方法:
//自定义网页离开事件
window.οnbefοreunlοad=null;
//自定义alert方法
window.alert = function(msg){
console.log(msg);
};
//获取当前页面状态
return document.readyState;
该属性返回以下值:
uninitialized - 还未开始载入
loading - 载入中
interactive - 已加载,文档与用户可以开始交互
complete - 载入完成
//设置剪贴板的内容
clipboardData.setData('text', '');
//读出当前剪贴板里的内容
clipboardData.getData('text');