DJNativeSwing:java内嵌浏览器的常用方法

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');
 

posted @ 2018-08-05 10:47  codeToSuccess  阅读(886)  评论(0编辑  收藏  举报