zoukankan      html  css  js  c++  java
  • 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');
     

  • 相关阅读:
    P1772 [ZJOI2006]物流运输
    P3951 小凯的疑惑
    P1082 同余方程(【模板】exgcd)
    T107741 【模板】权值线段树合并
    P3205 [HNOI2010]合唱队
    P1062 数列
    P1144 最短路计数
    P1502 窗口的星星
    P4147 玉蟾宫(【模板】悬线法)
    CSP模拟赛#3 分段(T1-26)
  • 原文地址:https://www.cnblogs.com/codeToSuccess/p/13906263.html
Copyright © 2011-2022 走看看