desktop.java
上传用户:hsjcxs
上传日期:2007-01-07
资源大小:3k
文件大小:8k
源码类别:

Applet

开发平台:

Java

  1. import java.net.*;
  2. import java.lang.*;
  3. import java.util.*;
  4. import java.awt.*;
  5. import java.applet.*;
  6. public class desktop extends Applet
  7. {
  8.  Frame f;
  9.  Image wallpaper;
  10. //for Icons (size=32x32)
  11.  int iconWH=32;
  12.  int iconCount=0;
  13.  Vector iconText  =new Vector();
  14.  Vector icons     =new Vector();
  15.  Vector iconX     =new Vector();
  16.  Vector iconY     =new Vector();
  17.  Vector iconLink  =new Vector();
  18. //for StartBtn
  19.  String startbtn="Start";
  20.  int startbtnEX=0;
  21.  Image startlogo,buffer=null;
  22. //for PopMenu
  23.  Vector items=new Vector();
  24.  Vector hrefs=new Vector();
  25.  Dimension d=size();
  26.  boolean pop=false;
  27.  int maxLength=0;
  28.  int fwidth=100;
  29.  int itemCount=0;
  30.  int mouseX=0,mouseY=0;
  31.  int menuY=0,menuEY=0;
  32.  int fheight=0;
  33. //code for Icons
  34.   public void addIcon(String txt,Image img,String href,String x,String y)
  35.   { iconText.addElement(txt);
  36.     icons.addElement(img);
  37.     iconLink.addElement(href);
  38.     iconX.addElement(x);
  39.     iconY.addElement(y);
  40.     iconCount++;
  41.   }
  42. //code for PopMenu
  43.   public void addItem(String caption,String href)
  44.   {
  45.     items.addElement(caption);
  46.     hrefs.addElement(href);
  47.     if(caption.length()>maxLength)maxLength=caption.length();
  48.     itemCount++;
  49.   }
  50.   public boolean mouseUp(Event e,int x,int y)
  51.   { int tempY=0,i=0,ix=0,iy=0,iex=0;
  52.     mouseX=x;
  53.     mouseY=y;
  54.     if(pop&&(0<=mouseX)&&(menuY<mouseY)&&(fwidth>=mouseX)&&(menuEY>mouseY))
  55.        {
  56.        for(tempY=menuY;tempY<menuEY;tempY+=fheight,i++)
  57.         if((tempY+8<mouseY)&&(tempY+fheight+8>mouseY))
  58.            {
  59.            repaint(0,tempY+8,fwidth,tempY+fheight+8);
  60.            showStatus("Select "+i+" is "+items.elementAt(i)+" Link To "+hrefs.elementAt(i));
  61.            break;
  62.            }
  63.        do_menu(i);
  64.        }
  65.     else
  66.        if((0<=mouseX)&&(d.height-fheight<mouseY)&&(startbtnEX>=mouseX)&&(d.height>mouseY))
  67.        {pop=!pop;repaint();}
  68.     else
  69.        {
  70.         repaint();
  71.         pop=false;
  72.        }
  73.   if(iconCount>0)
  74.    for(i=iconCount-1;i>=0;i--)
  75.    {
  76.     if(icons.elementAt(i)!=null)
  77.     {
  78.     ix= Integer.parseInt((String)  iconX.elementAt(i))-iconWH/2;
  79.     iex=iconWH;
  80.     iy= Integer.parseInt((String)  iconY.elementAt(i))+iconWH;
  81.     if((ix<=mouseX)&&(iy-iconWH<=mouseY)
  82.         &&(ix+iex>=mouseX)&&(iy+fheight-8>=mouseY))
  83.         {do_icon(i);break;}
  84.     }else break;
  85.     }
  86.     return true;
  87.   }
  88.   public boolean mouseMove(Event e,int x,int y)
  89.   {
  90.     int tempY=0;
  91.     mouseX=x;
  92.     mouseY=y;
  93.     repaint();
  94.     return true;
  95.   }
  96.   public void update(Graphics g){paint(g);}
  97.   public boolean imageUpdate(Image img,int flags,int x,int y, int w,int h)
  98.   {
  99.   if((flags&SOMEBITS)!=0){repaint(x,y,w,h);
  100.   } else if((flags&ABORT)!=0)
  101.   {repaint();}
  102.   return(flags&(ALLBITS|ABORT))==0;
  103.   }
  104.   public void paint(Graphics g)
  105.   {
  106.   Graphics screengc=null;
  107.   screengc=g;
  108.   g=buffer.getGraphics();
  109.   int i=0;
  110.   String str;
  111.   int y=0;
  112.   int ix=0,iy=0,iex=0;
  113.   d=size();
  114.   fheight= g.getFontMetrics().getHeight() + 8;
  115.   if(wallpaper!=null) g.drawImage(wallpaper,0,0,d.width,d.height-8,this);
  116.   g.setColor(Color.lightGray);
  117.   g.fillRect(0,d.height-fheight,d.width,fheight+8);
  118.   startbtnEX=g.getFontMetrics().stringWidth(startbtn)+20;
  119.   g.fill3DRect(0,d.height-fheight,startbtnEX,fheight+8,!pop);
  120.   if(startlogo!=null) g.drawImage(startlogo,0,d.height-fheight+2,16,fheight+8,this);
  121.   if(!pop)g.setColor(Color.black);else g.setColor(Color.white);
  122.   g.drawString(startbtn,17,d.height-3);
  123.   if(iconCount>0)
  124.    for(i=iconCount-1;i>=0;i--)
  125.    {
  126.     if(icons.elementAt(i)!=null)
  127.     {
  128.     g.setColor(Color.lightGray);
  129.     iex= g.getFontMetrics().stringWidth((String) iconText.elementAt(i));
  130.     ix= Integer.parseInt((String)  iconX.elementAt(i))-
  131.     iex/2;
  132.     iy= Integer.parseInt((String)  iconY.elementAt(i))+iconWH;
  133.     if((ix<=mouseX)&&(iy-iconWH<=mouseY)
  134.         &&(ix+iex>=mouseX)&&(iy+fheight-8>=mouseY))
  135.      g.draw3DRect(ix-4,iy-iconWH-4,iex+8,iy+fheight,true);
  136.     g.setColor(Color.black);
  137.     g.fillRect(
  138.      ix,
  139.      iy+2,
  140.      g.getFontMetrics().stringWidth((String) iconText.elementAt(i)),
  141.      fheight-8
  142.     );
  143.     g.setColor(Color.white);
  144.     g.drawString(
  145.     (String) iconText.elementAt(i),
  146.      ix,
  147.      iy+fheight-8
  148.     );
  149.     g.drawImage(
  150.      (Image)icons.elementAt(i),
  151.      ix+iconWH/2,
  152.      iy-iconWH,
  153.      iconWH,iconWH,this
  154.     );
  155.     }
  156.    }
  157.   if(pop&&(itemCount>0))
  158.    {
  159.    y=d.height-fheight-8;
  160.    menuEY=y;
  161.    for(i=itemCount-1;i>=0;i--)
  162.    {
  163.      str=(String) items.elementAt(i);
  164.      g.setColor(Color.lightGray);
  165.      if((0<=mouseX)&&(y-fheight+8<=mouseY)&&(fwidth>=mouseX)&&(y+8>=mouseY))
  166.      g.fill3DRect(0,y-fheight+8,fwidth,fheight,false);
  167.      else
  168.      g.fill3DRect(0,y-fheight+8,fwidth,fheight,true);
  169.      g.setColor(Color.black);
  170.      g.drawString(str,5,y);
  171.      y-=fheight;
  172.     }
  173.    menuY=y;
  174.    }
  175.    screengc.drawImage(buffer,0,0,null);
  176.   }
  177. //menu handler
  178.  public void do_menu(int i)
  179.  {
  180.   switch(i)
  181.   {
  182.   case 0:
  183.   f=new msgbox("About RDesktop",
  184.   "Created by: Raymond Anthony Samalon"+
  185.   "E-mail    : eng60728@leonis.nus.edu.sgn"+
  186.   "Made with : jdk 1.0,1998n"+
  187.   "What is it: a Desktop like interface forn"+
  188.   "            website navigational purposen"+
  189.   "Parameters:n"+
  190.   "           msg            is the message of the dayn"+
  191.   "           img            is the background imagen"+
  192.   "           cmd            is the menu button textn"+
  193.   "           logo           is the menu button imagenn"+
  194.   "           menu1  .. menuN  are the menu itemsn"+
  195.   "           link1  .. linkN  are the URLs      nn"+
  196.   "           icon1  .. iconN  are the icon image filesn"+
  197.   "           ilink1 .. ilinkN are the URLs      n"+
  198.   "           ix1    .. ixN    are the x-center of iconsn"+
  199.   "           iy1    .. iyN    are the top-y    of iconsn"+
  200.   "           itext1 .. itextN are the icons' textnn"+
  201.   "Note      :n link can be started with pop: for making messageboxn"+
  202.   "           I will be trying to allow dragging icon or a cool Mac Desktopn"+
  203.   "Super Note:n this is a freeware but if you want to support me...n"+
  204.   "BTW       :n THANK YOU FOR TRYING RDesktop n"
  205.   );
  206.   f.show();
  207.   break;
  208.   default:
  209.   do_link((String)hrefs.elementAt(i));
  210.   }
  211.  }
  212. // icon handler
  213.  public void do_icon(int i)
  214.  {
  215.   showStatus("Select icon"+i+" is "+iconText.elementAt(i));
  216.   do_link((String)iconLink.elementAt(i));
  217.  }
  218. // link executor
  219.  public void do_link(String link)
  220.  {
  221.   if(link.startsWith("pop:"))
  222.   {
  223.   f=new msgbox("RDesktop message",link.substring(4));
  224.   f.show();
  225.   }else
  226.   {
  227.    try{getAppletContext().showDocument(new URL(link));}
  228.    catch(MalformedURLException er)
  229.    {
  230.    f=new msgbox("RDesktop ERROR","PAGE NOT FOUND:n"+link);
  231.    f.show();
  232.    }
  233.   }
  234.  }
  235. // INIT() 
  236.  public void init()
  237.  {int i=0;
  238.   setBackground(Color.cyan);
  239.   d=size();
  240.   buffer=createImage(d.width,d.height);
  241.   if(getParameter("msg")!=null)
  242.   {f=new msgbox("Message of the day..!",getParameter("msg"));f.show();}
  243.   if(getParameter("img")!=null) wallpaper=getImage(getDocumentBase(),getParameter("img"));
  244.   if(getParameter("logo")!=null) startlogo=getImage(getDocumentBase(),getParameter("logo"));
  245.   if(getParameter("cmd")!=null) startbtn=getParameter("cmd");
  246.      addItem("(C)RDesktop","about");
  247.   for(i=1;getParameter("menu"+i)!=null;i++)
  248.   addItem(
  249.    getParameter("menu"+i),
  250.    (getParameter("link"+i)!=null)?getParameter("link"+i):"none"
  251.   );
  252.   for(i=1;getParameter("icon"+i)!=null;i++)
  253.   addIcon(
  254.    (getParameter("itext"+i)!=null)?getParameter("itext"+i):"",
  255.    getImage(getDocumentBase(),getParameter("icon"+i)),
  256.    (getParameter("ilink"+i)!=null)?getParameter("ilink"+i):"none",
  257.    getParameter("ix"+i),
  258.    getParameter("iy"+i)
  259.   );
  260.  }
  261. }
  262. class msgbox extends Frame
  263. {
  264.  msgbox(String title,String message)
  265.  {
  266.   super(title);
  267.   setLayout(new BorderLayout());
  268.   add("Center",new TextArea(message));
  269.   add("South",new Button("OK"));
  270.  }
  271.  public boolean action(Event e,Object arg)
  272.  {
  273.  hide();
  274.  return true;
  275.  }
  276. }