好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

B/S结构一机多屏实现

B/S结构一机多屏实现

B/S结构一机多屏实现,Applet实现。

 上一篇讨论了如何实现B/S结构的一机多屏,下面讨论一下具体的实现方法,由于作者是做Java开发的,所以采用Applet来实现一机多屏的效果。

  采用Applet获取客户端的屏幕,然后用拼装成自己需要的字符串。举例如下:

View Code

 1   import   java.applet.Applet;
   2   import   java.awt.AWTException;
   3   import   java.awt.GraphicsDevice;
   4   import   java.awt.GraphicsEnvironment;
   5   import   java.awt.HeadlessException;
   6   import   java.awt.Robot;
   7   import   java.util.ArrayList;
   8  
  9  
 10   public   class  MultiScreen  extends   Applet {
  11       private   static   final   long  serialVersionUID = -8112340460092802461L ;
  12  
 13       public   MultiScreen() {
  14           super  ();
  15       }
  16  
 17       public   static   String getScreenInfo(){
  18          String graphicsStr =  null  ;
  19          ArrayList<String> list =  new  ArrayList<String> ();
  20           try  {
  21              GraphicsEnvironment env =  GraphicsEnvironment.getLocalGraphicsEnvironment();        
  22              GraphicsDevice[] devices =  env.getScreenDevices();
  23               int  numberOfScreens =  devices.length;
  24              
 25               for ( int  i=0; i<numberOfScreens; i++ ){
  26                  list.add(devices[i].getDisplayMode().getWidth() + "#" +  devices[i].getDisplayMode().getHeight());
  27               }
  28              
 29              graphicsStr = "{\"screensSize\":\"" + list.toString() + "\",\"numOfScreens\":" + numberOfScreens + "}" ;
  30              System.out.println("Number of available screens = " +  numberOfScreens);
  31               return   graphicsStr;
  32              
 33          } catch  (HeadlessException e){
  34               e.printStackTrace();
  35           }
  36           return   graphicsStr;
  37       }
  38      
 39       public   static   void   main(String[] args){
  40           System.out.println(MultiScreen.getScreenInfo());
  41       }
  42  }

  显示的结果如下:

Number of available screens = 2
{"screensSize":"[1366#768, 1680#1050]","numOfScreens":2}

  那么利用这种方式就可以在前端使用js的方式对多屏进行控制。

  基本方法如下:

    用户登录时从库中取出用户的多屏配置信息,具体可能是URL,TITLE等等信息。由于主屏是固定的,所以2、3屏就采用window.open的方式打开。

  部分代码:

View Code

 1       var  mScreenObj =  {
   2          title:"" ,
   3          url:"_blank" ,
   4          height:0 ,
   5          0 ,
   6          offsideX:0 ,
   7          offsideY:0
  8       }
   9      
 10       function   multiScreen(mScreenObj) {
  11           this .url =  mScreenObj.url;
  12           this .title =  mScreenObj.title;
  13           this .height =  mScreenObj.height;
  14           this .width =  mScreenObj.width;
  15           this .offsideX =  mScreenObj.offsideX;
  16           this .offsideY =  mScreenObj.offsideY;
  17       }
  18      
 19      multiScreen.prototype.showMS =  function   () {
  20          window.open( this .url,  this .title, 'height=' +  this .height + ',width=' +  this .width + ',top=' +  this .offsideY + ',left=' +  this .offsideX + ',toolbar=no,menubar=no,scrollbars=no,location=no,status=no' );
  21      }

  调用的时候只要:

var screen = new multiScreen(mScreenObj);
screen .showMS();

  由于具体项目比较复杂,所以以上的例子只是最简单的可能性,真正在使用的时候对于屏幕的左上角是需要计算的,另外还需要考虑如果用户本身是一机多屏的用户但由于屏幕不够,他可能只能开2屏而无法开3屏,或者用户在使用一机多屏,但本身没有多屏权限,那么就只能使用单屏等等,这些细节问题。

  另外还需要说明一点,由于该Applet没有经过Java认证,权限是比较有限的,如果想要调用客户端本地的一些方法,例如使用Robot,就需要认证该Applet,相对来说就复杂一些。由于使用javascript的window.open来开2、3屏,所以屏幕就只能向正坐标延伸(ps. window.open的方法不允许开到负坐标)。如果想要开负坐标,可以使用Jframe,但Jframe就要认证该Applet了。

  最后关于引用Applet,给一个网上通用的例子作参考:

<!--[if !IE]> Firefox and others will use outer object --> 
<object classid="java: 包地址 " 
type="application/x-java-applet" 
codebase=" webapp存放Applet地址 "
height="100" width="100" id=" 类名 " name=" 类名 "> 
<param name="codebase" value=" webapp存放Applet地址 ">
<!--<![endif]--> 

<!-- MSIE (Microsoft Internet Explorer) will use inner object --> 
<object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" 
codebase=" webapp存放Applet地址 " 
height="200" width="200" id=" 类名 " name=" 类名 "> 
<param name="code" value=" 包地址 " />
<param name="codebase" value=" webapp存放Applet地址 ">
<strong> 
当前屏幕没有安装java jre,所以不能支持一机多屏功能。
<br /> 
<a href="http://java.sun.com/products/plugin/downloads/index.html"> 
从这里获取并安装java jre.
</a> 
</strong> 
</object> 
<!--[if !IE]> close outer object --> 
</object> 
<!--<![endif]-->

  说明:以上红色字替换成自己的类即可,但不要将编译好的Applet放入web-inf下,因为前端无法访问该路径。

  作者水平有限,欢迎大家一起讨论,谢谢。

常在博园走,也该湿湿鞋。

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于B/S结构一机多屏实现的详细内容...

  阅读:51次