SWT浏览器设计

来源:互联网 发布:怎样写好钢笔字 知乎 编辑:程序博客网 时间:2024/06/04 19:55

 

SWT浏览器设计

 

 

先赞一下swt,正是有了它很多东西才这么简单。

废话不多说,先介绍下几个基本情况。由于swt可以使用了系统的资源,所以你在window下使用的浏览器的内核实际上就是ie,这样好处是很大的,比如显示就不会有什么问题,处理jscss也不会有什么大碍

收藏夹也可以直接使用ie的,不过为了区分我没有这样做。

主要几个需要处理的地方:

1、 新窗口打开。

有的网页是用_blank来打开的,还有的用户会右键新窗口打开,所以必须处理下,默认的情况是用系统默认浏览器打开。

具体的方法可以参考:

       //为浏览器加入打开新窗口事件

       browser.addOpenWindowListener(new OpenWindowListener() {

           public void open(final WindowEvent e) {

              //新建一个窗口

              Shell shell = new Shell();

              //初始化这个窗口,并将事件e当做参数传给它

              createContents(shell, e);

              //打开新窗口

              shell.open();

              shell.layout();

           }

    });

       if (e == null) {

           //如果传来的窗口事件为空,那么意味着是第一次打开,就打开设置的主页

           setHomePage(browser);

       } else {

           //如果不为空则打开你想要打开的页面

           e.browser = browser;

    }

关键是e.browser = browser;这句话,将e的事件用我的浏览器打开。

 

2、 前进后退实现。

我是用了两个堆栈分别保存前进后退的,当前页不在堆栈中,点击前进后退分别处理。

以下为参考代码:

       bBack.setText("后退");

       bBack.addSelectionListener(new SelectionAdapter() {

           @Override

           public void widgetSelected(SelectionEvent arg0) {

              if (!back.isEmpty()) {

                  String url = back.pop();

                  forward.push(browser.getUrl());

                  browser.setUrl(url);

              }

              checkEnable(back, bBack, forward, bGo);

           }

 

       });

       bBack.setEnabled(false);

      

       //前进

       bGo.setText("前进");

       bGo.addSelectionListener(new SelectionAdapter() {

           @Override

           public void widgetSelected(SelectionEvent arg0) {

              //如果前进栈不为空,那么定点出栈,将定点 设置为当前页,将当前页入后退栈

              if (!forward.isEmpty()) {

                  String url = forward.pop();

                  back.push(browser.getUrl());

                  browser.setUrl(url);

              }

              checkEnable(back, bBack, forward, bGo);

           }

 

       });

    bGo.setEnabled(false);

 

    public void checkEnable(Stack<String> back, ToolItem bBack,

           Stack<String> forward, ToolItem bForward) {

       if (back.isEmpty()) {

           bBack.setEnabled(false);

       }

       if (!forward.isEmpty()) {

           bForward.setEnabled(true);

       }

       if (forward.isEmpty()) {

           bForward.setEnabled(false);

       }

       if (!back.isEmpty()) {

           bBack.setEnabled(true);

       }

}

 

3、 网页的保存。

时间和能力有限,这边我是比较省略了,参考网上某些大牛的写法,还是可以实现ie的全部功能的,甚至可以保存成mht的归档文件。

我是直接保存了网页的html代码就过了哦。

参考代码:

       final MenuItem saveAs = new MenuItem(menu_1, SWT.NONE);

       saveAs.setText("另存为..");

       saveAs.addSelectionListener(new SelectionAdapter() {

           public void widgetSelected(final SelectionEvent e) {

              FileDialog save = new FileDialog(shell, SWT.SAVE);

              save.setFilterExtensions(new String[] { "*.htm,*.html" });

              save.setFileName(shell.getText());

              String path;

              if ((path = save.open()) != null) {

                  if (!path.endsWith(".htm") && !path.endsWith(".html")

                         && !path.endsWith(".HTM")

                         && !path.endsWith(".HTML")) {

                     path += ".html";

                  }

                  try {

                     BufferedWriter out = new BufferedWriter(new FileWriter(

                            path));

                     out.write(browser.getText());

                     out.close();

                  } catch (Exception ee) {

                     ee.printStackTrace();

                  }

              }

           }

    });

4、 收藏夹、历史的实现

没有使用window里面的fav文件夹,我是直接保存进access的,很简单,这里就不献丑了。

 

下面是全部的代码打包,要调试的话可能需要你另外加上swt包了,顺便说下我是用了swtdesigner6.7进行gui设计的,可能需要安装才能调试代码。

下载地址:http://www.uushare.com/user/nevergiveup23/file/1236513