<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Sugo

    Goof off ? no way: never
    posts - 20, comments - 8, trackbacks - 73, articles - 1
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    2006年9月12日

    JTable如果在編輯狀態下,當要保存的時候,比如直接點保存按鈕,得到的數據不是編輯狀態下的數據,琢磨出一個方法,記錄一下:
          i和j表示正在被編輯的行號列號
           CellEditor   ce   =   md.getCellEditor(i,j);
           //CellEditor   ce   =   md.getCellEditor(md.getEditingRow(), md.getEditingColumn());    
           ce.stopCellEditing();  
           Object   value   =   ce.getCellEditorValue();  
          // model.setValueAt(value,md.getEditingRow(), md.getEditingColumn());
           model.setValueAt(value,i,j);

    posted @ 2008-01-14 21:30 sugo 閱讀(1400) | 評論 (0)編輯 收藏

         獲取網卡物理地址:
             String cmd="ipconfig /all";
             Process p=Runtime.getRuntime().exec(cmd);
             BufferedReader bis=new BufferedReader(new InputStreamReader(p.getInputStream()));
             String line="";
             while((line=bis.readLine())!=null){
               if(line.indexOf("Physical Address")!=-1){
                 Pattern ptn=Pattern.compile("((\\w{2})|(\\d{2})|(\\w+\\d+)|(\\d+\\w+))-.*");
                  Matcher m=ptn.matcher(line.trim());
                  while(m.find()){
                    System.out.println("get mac  "+m.group());
                  }
               }
              }

    posted @ 2007-12-25 16:47 sugo 閱讀(369) | 評論 (0)編輯 收藏

    閑暇之余寫的坦克小游戲,源碼貼出來,有意見和疑問請留言,共同進步

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <TITLE> New Document </TITLE>
    <META NAME="Generator" CONTENT="EditPlus">
    <META NAME="Author" CONTENT="">
    <META NAME="Keywords" CONTENT="">
    <META NAME="Description" CONTENT="">
    </HEAD>
    <SCRIPT LANGUAGE="JavaScript">
    <!--
     var missleno=0;
     var energy=100;
     var enemytimer;
     function document.onkeydown()

      if (window.event.keyCode==37)   // 方向鍵 <-
      { 
        var temp=document.getElementById("sg");
     temp.style.pixelLeft-=10;
       }
      else if (window.event.keyCode==39)   // 方向鍵 ->
      { 
        var temp=document.getElementById("sg");
     temp.style.pixelLeft+=10;
       }
       else if (window.event.keyCode==40){
         var temp=document.getElementById("sg");
      temp.style.pixelTop+=10;
     // temp.style.height=66px;

       }
       else if(window.event.keyCode==38){  //  up ^
         //alert(window.event.keyCode);
      var temp=document.getElementById("sg");
      temp.style.pixelTop-=10;
       }
       else if(window.event.keyCode==32){
         fire(missleno);
         missleno++;
       }
       // else{
     // var temp=document.getElementById("missle1000");
     // if(temp==null){
     //  alert('null');
     // }
     //}
    }
     function fire(mno){
       var no=mno;
       var temp=document.getElementById("sg");
       tt=document.createElement("div");
       cont=document.createTextNode("=");
       tt.appendChild(cont);
       tt.id="missle"+no;
       // missleno++;
       tt.style.position="absolute";
       // var obj=eval("sg"+num);
       tt.style.pixelTop=temp.style.pixelTop+15;
       tt.style.pixelLeft=temp.style.pixelLeft+60;
       document.body.appendChild(tt);
       move(no);
     }
     function move(mno){
       var no=mno;
       var temp=document.getElementById("missle"+no);
       // var temphn=document.getElementById("hn");
       temp.style.pixelLeft+=5;
       var result=monitor_missle(no); //監控子彈是否打中
       //alert(result);
       if(result!='stop'){
         if(temp.style.pixelLeft!=1000){
          setTimeout("move("+no+")",20);
         }
         else if(temp.style.pixelLeft==1000){ //消除子彈
           temp.parentNode.removeChild(temp);
         }
       }
     }
      function showpos(){
       var temp=document.getElementById("hn");
       alert(temp.style.pixelLeft);
      }
      function flush(){
       var temp=document.getElementById("hn");
       //temp.parentNode.removeChild(temp);
       temp.style.display="none";
       temp=document.getElementById("missle"+missleno);
       temp.parentNode.removeChild(temp);
      }
      function initEnemy(){
        tt=document.createElement("div");
        cont=document.createTextNode("enemy");
        tt.appendChild(cont);
        tt.id="enemy";
        tt.style.position="absolute";
        // var obj=eval("sg"+num);
        tt.style.pixelTop=390;
        tt.style.pixelLeft=900;
     tt.style.border="dashed thick #008022";
     tt.style.width="36px";
     tt.style.padding="2px 4px 0px 4px";
     tt.style.background="#ff3303";
     tt.style.color="#FFFFEE";
        document.body.appendChild(tt);
     enemy_move();
      }
      function monitor(){
       var enemy=document.getElementById("enemy");
       for(var t=0;t<missleno;t++){
         var temp=document.getElementById("missle"+t);
      if(temp==null)
       continue;
         else{
      if(((enemy.style.pixelTop-10)<temp.style.pixelTop) &&((enemy.style.pixelTop+10)>temp.style.pixelTop) &&  (temp.style.pixelLeft>=enemy.style.pixelLeft)){
        energy--;
        temp.parentNode.removeChild(temp);
        alert(energy);
       }
      }
       }
     
      }
      function monitor_missle(mno){
       var t=mno;
       var enemy=document.getElementById("enemy");
       var temp=document.getElementById("missle"+t);
      if((temp!=null)&&(enemy!=null)){
       if(((enemy.style.pixelTop-10)<temp.style.pixelTop) &&((enemy.style.pixelTop+10)>temp.style.pixelTop) &&  (temp.style.pixelLeft>=enemy.style.pixelLeft)){
        energy--;
        var blood=document.getElementById("bld");
        blood.innerHTML=energy;
        temp.parentNode.removeChild(temp);
        if(energy==0){
        enemy.parentNode.removeChild(enemy);
        clearTimeout(enemytimer);
       // enemy.style.display="none";
        alert("YOU WIN,CONGRATULATIONS!");
        }
        return 'stop';
       }
      }
      return 'continue';
      }
      function enemy_move(){
     
      var enemy=document.getElementById("enemy");
      enemy.style.pixelLeft-=10;
      enemytimer=setTimeout("enemy_move()",1000);
      }
     
    //-->
    </SCRIPT>
    <BODY>
    <div style="border: dashed thick #008000; width:36px; text-align:center;  padding:2px 4px 0px 4px; background:#ff3300; color:#FFFFFF;position:absolute" id="sg" >sugo</div>
    <!-- <div style="border: dashed thick #008000; width:36px; text-align:center;  padding:2px 4px 0px 4px; background:#ff3300; color:#FFFFFF;position:absolute;left=1000;top=500" id="hn">hanna</div>  -->
    <SCRIPT LANGUAGE="JavaScript">
    <!--
      initEnemy();
     // setInterval("monitor()",500);
    //-->
    </SCRIPT>
    <div id="bld"></div>
    </BODY>
    </HTML>

    posted @ 2007-11-22 18:10 sugo 閱讀(450) | 評論 (0)編輯 收藏

         實現了控制隨機生成的一個六位字符串下落,可以向左、向右、向下加速。實現的功能仿照俄羅斯方塊來做,本來想實現上下兩行相同字母消除功能,但想起一個方法(代碼中的erase()方法),感覺沒問題,但一直沒有實現,后來也懶得想了。現將代碼貼在這里,希望讀到這篇文章的朋友如果感興趣的話提出寶貴意見,并可以隨意拷貝代碼完善功能:)
     <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <TITLE> New Document </TITLE>
    <META NAME="Generator" CONTENT="EditPlus">
    <META NAME="Author" CONTENT="Sugo">
    <META NAME="Keywords" CONTENT="">
    <META NAME="Description" CONTENT="">
    </HEAD>
    <SCRIPT LANGUAGE="JavaScript">
    <!--
    var incx=10;//每次下落的高度
    var sty=20; //開始時候的縱坐標
    var stx=500; //開始時候的橫坐標
    var num=0; //每個div標號,同時也起到確定下一個div元素停止的位置
    var len=10;
    var timer;//定時器
    //var arr0,arr1,arr2,arr3,arr4,arr5,arr6,arr7,arr8,arr9,arr10,arr11,arr12,arr13,arr14,arr15; //用于字母消除作用的數組,此功能沒實現,這些變量可以不用
    //初始字符串初始位置
    function firstshow(){ 
     //temp=document.getElementById("sg");
     sg0.style.pixelTop=sty;
     sg0.style.pixelLeft=stx;
     
    }
    //增加字符串
    function addDiv(){
     tt=document.createElement("div");
     divcontent=randomString(6);
     cont=document.createTextNode(divcontent);
     tt.appendChild(cont);
     tt.id="sg"+num;
     tt.style.position="absolute";
    // var obj=eval("sg"+num);
     tt.style.pixelTop=10;
     tt.style.pixelLeft=500;
     document.body.appendChild(tt);
     
    }

    //字符串下落方法
     function fall(id){
       var obj=eval("sg"+id);
      
      obj.style.pixelTop+=incx;
      obj.style.pixelLeft=stx;
      if(obj.style.pixelTop==(610-len*num)){   //到達目的地址時(下落到610處,此處可隨意改動)
       obj.style.pixelTop=610-len*num;
       //erase(); 功能沒有實現
       num++;
       addDiv();
       fall(num);
      }
      else if(obj.style.pixelTop<(610-len*num)) //沒有到達目的地址時
      timer = setTimeout('fall(num)',1000); //1000可以換成任意數字,越小下落速度越快
      else if(obj.style.pixelTop>(610-len*num)) //處理出現地址大于目的地址時
      {
      }
     }
     //當使用方向鍵操作時使用的下落方法
     function fall1(id,sx,sy){
       var obj=eval("sg"+id);
      
      obj.style.pixelTop=sy+incx;
      obj.style.pixelLeft=sx;
      y=obj.style.pixelTop;
      x=obj.style.pixelLeft;
      if(obj.style.pixelTop==(610-len*num)){   //到達目的地址時
       obj.style.pixelTop=610-len*num;
       //erase(); 功能沒有實現
       num++;
       addDiv();
       fall(num);
      }
      else if(obj.style.pixelTop<(610-len*num)) //沒有到達目的地址時
      timer = setTimeout('fall1(num,x,y)',1000); //1000可以換成任意數字,越小下落速度越快
      else if(obj.style.pixelTop>(610-len*num)) //處理出現地址大于目的地址時
      {
      }
     }
    //產生隨機六位字符串
     function randomString(leng){
       var source="abcdefghijklmnopqrstuvwxyz";
       var result="";
       for(var i=0;i<leng;i++){
      
        result+=source.charAt(Math.random()*source.length)
       }
       return result;
     }
     //鍵盤控制
     function document.onkeydown()

      if (window.event.keyCode==37)   // 方向鍵 <-
      { 
        var temp=document.getElementById("sg"+num);
     temp.style.pixelLeft-=8;
     x=temp.style.pixelLeft;
     y=temp.style.pixelTop;
     clearTimeout(timer);
        fall1(num,x,y-10);
       }
      else if (window.event.keyCode==39)   // 方向鍵 ->
      { 
        var temp=document.getElementById("sg"+num);
     temp.style.pixelLeft+=8;
     x=temp.style.pixelLeft;
     y=temp.style.pixelTop;
     clearTimeout(timer);
        fall1(num,x,y-10);
       }
       else if (window.event.keyCode==40){ //方向鍵 |
         var temp=document.getElementById("sg"+num);
      temp.style.pixelTop+=10;
         x=temp.style.pixelLeft;
      y=temp.style.pixelTop;
      clearTimeout(timer);
         fall1(num,x,y-10);
       }
    }
    //字母消除程序,暫時不能實現功能
     function erase(){
      var pos=new Array();
      for(var i=0;i<=num;i++){ //得到所有存在的div每個字符的位置值
        dpos=document.getElementById("sg"+i);
     x=dpos.style.pixelLeft;
     //content=dpos.value;
        obj=eval("arr"+i);
     obj=new Array();
     for(var j=0;j<6;j++){
       obj[j]=x+j;
     }
     pos[i]=obj;
      }
     //alert(num);
      if(num>=1){
       
        for(t=num-1;t<num;t++){
       for(tt=0;tt<6;tt++){
         for(ttt=0;ttt<6;ttt++){
      // alert(pos[t][ttt]);
        if(pos[t][tt]==pos[t+1][ttt]){
        // alert("here"+tt+"  "+ttt);
          mod1=document.getElementById("sg"+t);
       mod2=document.getElementById("sg"+(t+1));
          var rep1="",rep2="";
       for(var l=0;l<mod1.innerHTML.length;l++){
         if(l!=tt){
         rep1+=mod1.innerHTML.charAt(l);
         }
         else{
         rep1+="-";
         }
       }
       mod1.innerHTML=rep1;
       //rep1='';
       //alert(mod1.innerHTML);
       for(var ll=0;ll<mod2.innerHTML.length;ll++){
         if(ll!=ttt){
          rep2+=mod2.innerHTML.charAt(ll);
         }
         else{
          rep2+="-";
                  }
       }
       mod2.innerHTML=rep2;
       //rep2='';
        }
      }
          }
        }
      }
     }
    //-->
    </SCRIPT>
    <BODY onload="firstshow();" >

    <div id="sg0" style="position:absolute"><SCRIPT LANGUAGE="JavaScript">
    <!--
    document.write(randomString(6));  //6可以改為任意數字,數字即是字符串的長度
    //-->
    </SCRIPT></div>
    <SCRIPT LANGUAGE="JavaScript">
    <!--
      fall(0);
    //-->
    </SCRIPT>
    </BODY>
    </HTML>

    posted @ 2007-07-30 16:48 sugo 閱讀(374) | 評論 (0)編輯 收藏

    ? ?? 訪問某論壇時,發現論壇全是html頁面。今天搞明白了,原來是重寫了頁面的url。通俗的說就是雖然地址欄里的是html結尾的url,但實際上訪問的是后臺動態jsp(php、asp)頁面。好像是一種視覺欺騙。
    ???? 實現這個技術也很容易,一般都會使用國外的一個urlrewriter過濾器。
    ???? 1、下載:
    ???? 下載地址為http://tuckey.org/urlrewrite/#download
    ???? 2、解壓和基本配置
    ???? 使用的為2.6版本,解壓后,包中含有一個urlrewrite.xml,此為關鍵的配置文件。還有lib文件夾下的urlrewrite-2.6.0.jar這個包。將此包放到web應用程序的web-inf/lib下面,urlrewrite.xml放到web-inf下。
    ???? 3、修改應用程序web-inf文件夾下的web.xml文件,添加如下內容:
    ????? <filter>
    ???????? ??? <filter-name>UrlRewriteFilter</filter-name>
    ???????????? <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
    ????? </filter>
    ????? <filter-mapping>
    ??????? ???? <filter-name>UrlRewriteFilter</filter-name>
    ???????????? <url-pattern>/*</url-pattern>
    ????? </filter-mapping>
    ???? 4、修改應用程序web-inf文件夾下的urlrewrite.xml文件,添加rule,內容如下:
    ??????? <rule>
    ?????????? <name>html rule</name>
    ?????????? <from>/test/thread([0-9]+)_([0-9]+).html</from>
    ?????? ??? <to>/show.jsp?id=$1&amp;order=$2</to>
    ?????? </rule>
    ???????? 其中要求對正則表達式有所了解,以上的語句可以實現當你訪問http://localhost/test/thread12_56.html時,會轉向http://localhost/show.jsp?id=12&order=56這個動態頁面。
    ???????? 個人覺得需要開發人員對頁面參數非常熟悉。這個技術還是值得大家來嘗試一下的。個人論壇可以使用此技術:),讓別人看不出你是使用什么編寫的。

    posted @ 2007-03-22 14:11 sugo 閱讀(2268) | 評論 (3)編輯 收藏

    ????? 實現了基本的網絡圖片、mp3、影片下載,原理為首先根據要下載的圖片(mp3、影片)的url,將它的信息寫入一個臨時文件。然后再從這個臨時文件將信息導入到真正你想要存儲的圖片(mp3、影片)。第一步為網絡到本地,第二步為本地到本地。
    ???????//網絡到本地代碼:
    ?????? ?java.net.URL l_url = new java.net.URL("http://localhost/rlzy/photo/"+addition); //圖片url地址
    ??????? java.net.HttpURLConnection l_connection = (java.net.HttpURLConnection) l_url.openConnection();
    ??????? int randomnum=(int)(Math.random()*100);
    ??????? System.out.println(randomnum);
    ??????? File f1=new File(photopath+randomnum);
    ??????? FileOutputStream o=new FileOutputStream(f1);
    ??????? l_connection.connect();
    ??????? java.io.InputStream l_urlStream;
    ???????
    ??????? l_urlStream = l_connection.getInputStream();

    ?????? byte b[]=new byte[1000];
    ?????? int n;
    ????????? while( (n=l_urlStream.read(b))!=-1)
    ????????????? {
    ????????? ??? o.write(b,0,n);
    ????????????? }
    ????????? o.close();
    ????????? l_urlStream.close();
    ????????
    ?????????
    ????????? //本地到本地
    ????????? RandomAccessFile random=new RandomAccessFile(f1,"r");
    ????????? long? forthEndPosition=0;
    ???????????File tfolder1=new File("E:/111/);//存儲圖片路徑
    ???????? ? tfolder1.mkdirs();//如果不存在就創建此文件夾,如果沒有這個步驟將會出現FileNotFoundException
    ??????????File f2=new File("e:/111/"+name);
    ?????????????
    ??????????RandomAccessFile random2=new RandomAccessFile(f2,"rw");?
    ????????????
    ????????? random.seek(random.length());
    ???????? ?long endPosition=random.getFilePointer();
    ??????????random.seek(forthEndPosition);
    ??????????long startPoint=random.getFilePointer();
    ????????????while(startPoint<endPosition) //開始拷貝文件信息
    ????????????????? { n=random.readByte();
    ??????????????????? random2.write(n);
    ??????????????????? startPoint=random.getFilePointer();
    ????????????????? }
    ?????????? random2.close();random.close();
    ?????????? f1.delete(); //刪除臨時文件?????
    ????????? 程序寫了一個簡單的GUI界面?,使其看起來更像一個下載器了。如果提高下載速度還需進一步的學習和研究。有興趣的朋友可以點擊下載研究
    ????????? http://sugo.gnway.net/test/FreeDown.jar(申請的一個免費二級域名,速度可能不快 :-) ,另外需要sun公司的jre環境,Windows、Linux下均能運行)
    ?????????

    posted @ 2007-01-26 14:04 sugo 閱讀(322) | 評論 (0)編輯 收藏

    ????? 報表中有這個需求,當報表很大需要下拉時,但表頭在正上方,看不到對應的是哪一項的數據。此功能可以使用虛擬一個表頭來實現。具體的靈感來自網站隨著鼠標移動的圖片。當鼠標下移時,圖片跟著走。對于這個需求來說只需把圖片換成一個表格即可。
    ?????? 網頁中加入如下代碼:
    ??????<DIV id="thead" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; FILTER: progid:DXImageTransform.Microsoftpadding:8px; ; LEFT: expression(eval(document.body.scrollLeft)+eval(document.body.clientWidth)-980); BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; POSITION: absolute; ; TOP: expression(eval(document.body.scrollTop)+eval(document.body.clientHeight)-500); TEXT-ALIGN: center">
    <TABLE cellSpacing=0 cellPadding=0 align=center border=0>
    <TBODY>
    <TR>
    <TD>
    <EMBED style="LEFT: -73px; POSITION: absolute; TOP: 125px" align=right>
    <table bgcolor="red"? border=1>
    <tr>
    <td>sdfsd</td><td>sdfsd</td><td>sdfsd</td>
    </tr>
    </table>
    </EMBED>
    </TD>
    </TR>
    </TBODY>
    </TABLE>
    </DIV>
    ?????? 紅色代碼部分可以更替為任意html標記,比如img、input等等。
    ?????? 注:內嵌的表格顏色最好深一些,不然會出現重疊現象。調整虛擬表頭相對屏幕上方的位置在藍色粗體的地方,可根據需要修改。
    ?????? 當需要打印報表時,可以添加一個button來控制這個表頭的顯示 js方法為
    ?????? function control(){?
    ???????? var temp=document.getElementById("thead");
    ????????? if(temp.style.display=='none')
    ????????????? temp.style.display='' ;
    ????????? else
    ????????????? temp.style.display='none';
    ?????? }

    posted @ 2007-01-24 18:53 sugo 閱讀(1511) | 評論 (0)編輯 收藏

    ???? 使用hibernate的hql查詢,當指定某些字段時,一行數據此時得到的是相應的一個數組。而字段全部查詢得到的是一個pojo對象。
    ???? 使用struts的邏輯標簽顯示時,如果得到的是一個pojo對象,可以使用<logic:iterate>,也可以使用<logic present>使用的時候不用再定義id,name屬性即為request或者session里存儲的對象的別名。然后使用<bean:write>定義兩個屬性name和logic標簽的name一樣,property為對應的類中定義的成員變量名字。
    ???? 如果得到的是數組的集合,則需要<logic:iterate>嵌套。例如:
    ??? <logic:iterate name="du" id="indiv" scope="session">
    ??? ???? <logic:iterate name="indiv" id="tiny">
    ????????????? <bean:write name="tiny" />
    ??????? </logic:iterate>
    ??? </logic:iterate>
    ???? 注(個人認為):可以看到規律,下一層的name為上層的id。
    ??? 得到的是集合,如List 或者Vector等。例如:
    ?? <logic:iterate scope="session" id="du" name="dlist">
    ????? <bean:write name="du" property="wdate" />&nbsp;
    ????? <bean:define id="text" name="du" property="content" type="String"/>
    ??????<html:link href="modify.do" paramId="id" paramName="du" paramProperty="id" linkName="mod"? />
    ????? <html:button property="modify" onclick="mod.click()" value="modify" />
    ????? <html:textarea property="content" value="<%= text %>"></html:textarea><br>
    ????? <bean:write name="du" property="username" />&nbsp;
    ????? <bean:write name="du" property="weather" />&nbsp;<br>
    ????? <html:link href="modify.do?manipulate=delete" paramId="id" paramName="du" paramProperty="id"??????? linkName="del"? />
    ????? <html:button property="delete" onclick="del.click()" value="delete" />
    ??? </logic:iterate>
    ??? 例子中還包括在一個組件中填值,使用<bean:define>標簽,可以得到一個對象,id就是對象的引用。
    ????<html:link>的linkName相當于超鏈接<a href="">中的id屬性,<html:link>的page和href的不同,page需要相對路徑,url前面需要加上/,href則不用。<html:link>參數傳遞,如果確定需要傳遞的參數,直接跟在url后面即可。如果是動態的,則需要paramId, paramName, paramProperty 。第一個為參數名稱,第二個為存儲的對象的名字,如在request、session中存儲的名字,第三個就是這個對象里面的成員變量。多個參數一般使用HashMap。
    ??? Struts中的action,即便是不想用ActionForm,也需要在action的配置屬性里寫入,否則會出現空值的問題,今天遇到了,所以定義DynaActionForm還是必要的。
    ??? hibernate一般的數據庫操作都通過session來進行,我把所有涉及的操作都寫成了一個ObjectDAO,比較方便操作。

    posted @ 2007-01-15 20:39 sugo 閱讀(312) | 評論 (0)編輯 收藏

    ??? 當提交表單時,此時操作人員只需等待結果返回,這里,我實現了一個覆蓋網頁的方法,使得整個網頁被一個很大的div覆蓋,這樣操作人員就不能點擊頁面的內容了。實現很簡單,一個div
    ??? <div id="doing"? style="Z-INDEX: 12000; LEFT: 0px; WIDTH: 100%; CURSOR: wait; POSITION: absolute; TOP: 0px; HEIGHT: 100%; display:none ">
    ??????????? <table width="100%" height="100%">
    ??????????????? <tr align="center" valign="middle">
    ??????????????????? <td>
    ??????????????????????? <table width="169" height="62" bgcolor="#99cccc" style="FILTER: Alpha(Opacity=75); WIDTH: 169px; HEIGHT: 62px">
    ??????????????????????????? <tr align="center" valign="middle">
    ??????????????????????????????? <td>頁面提交中.<br>
    ??????????????????????????????????? Loading.</td>
    ??????????????????????????? </tr>
    ??????????????????????? </table>
    ??????????????????? </td>
    ??????????????? </tr>
    ??????????? </table>
    ??????? </div>
    ???? 頁面最初載入時把它隱藏起來,當按下提交按鈕時讓它顯示。結果返回后再次讓它隱藏。jsp代碼:
    ???? <%
    ???????? ?String content=request.getParameter("tc");
    ????????? if(content==null){
    ??? %>
    ??????? <form action="#" method="post" onsubmit="return show()">
    ????????? <textarea name="tc">dfdfsdf
    ???????????? dfdaf</textarea>
    ??????????<input type=submit value=" go "? >
    ?????? </form>
    ?? <%
    ???? }
    ?????? else{
    ????????? ?if(content.indexOf("\n")==-1)
    ??????????? ?out.println("haha");
    ??????????? // content=content.replaceAll("\n","<br>");
    ?? %>
    ????????? <textarea> <% out.println(content); %>
    ?????? ?</textarea>
    ?? <%
    ???? ?}
    ?? %>
    ?? show方法:
    ??? function show(){
    ???????? document.getElementById('doing').style.display=''
    ??????? ?return true;
    ?? }
    ??? 當表單提交并返回結果時,頁面重新加載,div的display屬性自動又變為none。達到了想要的效果。

    posted @ 2007-01-14 23:31 sugo 閱讀(2073) | 評論 (2)編輯 收藏

    ? ? 幻燈片大家都非常熟悉了,我以雅虎幻燈片為靈感,開發了自己的幻燈片。
    ?? ?首先,這個幻燈片程序是在我的jsp圖片查看器上加上去的,算是滿足自己的需求吧,哈。因為有時候看幻燈片對我來說是一種享受。。。嗯
    ??? 首先是做一個基本的圖片自動播放的程序,這個純javascript就可以實現,實現需要的javascript方法也很簡單,代碼如下:
    ???? function rotateBanner(frameNumber,interval){
    ????? document.banner.src=fn[frameNumber].src;//為頁面中的id為banner的圖片標記動態定義圖片的鏈接地址
    ????? var imageChoice=frameNumber+1;
    ???? ?if(imageChoice==fn.length){
    ???????? imageChoice=0;
    ????? }
    ????? player=window.setTimeout("rotateBanner("+imageChoice+","+inv+")",inv);
    ?? }
    ?? 其中frameNumber為圖片路徑數組的下標,interval為顯示下一幅圖片的間隔時間。
    ?? 首先,我們要定義一個全局數組,數組各個元素的值為圖片的url。(一般我們都把一類的圖片放在一個目錄中,這種情況可以通過動態生成的方法來動態的為這個全局數組的各個元素賦值)
    ?? js方法的使用也很簡單,在這個頁面的body標簽加入onload=“rotateBanner(0,5000)”即可,在這里0為數組的第一個元素下標,5000為播放的間隔時間5秒。
    ?? 一個不能被我們控制的幻燈片頁面就產生了。下面我們就要開始對其進行控制了,首先,我們實現讓幻燈片停止滾動播放圖片。這個很簡單,上面的js方法我們定義了一個定時器player變量,這個player是個全局的,當不停的遞歸調用的時候,都是它自己在不停的被賦值。停止它我們只需把這個定時器去處即可。在頁面中加上一個超鏈接,在它的onclick事件中觸發一個js方法,不妨我們再寫一個方法,代碼為:
    ?? function stop(){
    ?????? window.clearTimeout(player);
    ?? }
    ??? 這樣就把圖片循環顯示的player定時器去除了。
    ??? 有停止就要有開始,開始就容易了,在開始超鏈接的onclick事件調用rotateBanner()方法就行了,但這里有個問題,這個一會再說。
    ??? 我們再添加上一幅,下一幅超鏈接,我們可以通過手工點擊來顯示下一頁,這里就要又要定義一個全局變量了,它用來記錄顯示圖片的數組下標。代碼如下:其中的firstno變量我們后面再說它的作用
    ?? function previous(){
    ??? if(imgno==0)
    ?????? imgno=fn.length;
    ?????? imgno=imgno-1;
    ?????? firstno=imgno;
    ?????? document.banner.src=fn[imgno].src;
    ? }
    ?? function next(){
    ??? ?if(imgno==fn.length-1)
    ?????? imgno=-1;
    ?????? imgno=imgno+1;
    ?????? firstno=imgno;
    ????? document.banner.src=fn[imgno].src;
    }
    ? imgno就是我們定義的全局變量,來記錄當前圖片的數組下標。但這樣有個問題,那就是imgno的初值為多少?現在的代碼中并沒初始化。好,我們分析一下,從頁面打開開始,onload事件調用rotateBanner方法,這是最初的入口,下一幅上一幅按鈕也是當執行了這個事件后才會有作用,所以我們需要在rotateBanner方法中記錄圖片的下標。其實也可以在聲明的時候初始化為0。
    ?? 所以我們在點擊開始的時候,rotateBanner(firstno,firstclock)函數里面的參數要傳入當前圖片的下標,不然我們點開始后幻燈片是開始幻燈顯示了,但它又從0開始了,不會從我們停止定時器時候的顯示的圖片的位置開始。在此firstno全局變量也是起到記錄的作用,但注意它和imgno變量的不同,它記錄的是目前顯示的圖片的下標,而imgno在previous和next方法中已經不是當前圖片的下標。firstclock是下面我要說明的內容。
    ?? 要控制每張圖片顯示間隔的時間,通過一個下拉選擇框來操作,取得每個選項相應的值很簡單。當選項改動時觸發一個事件,我們取名為setclock()方法,firstclock就是來獲得間隔時間的,代碼為:
    ?? function setclock(clock){
    ???? ?firstclock=clock;
    ????? rotateBanner1(imgno,clock);
    ?? }
    ?? rotateBanner1()的代碼為:
    ?? function rotateBanner1(frameNumber,interval){
    ???? window.clearTimeout(player);
    ??? ?document.banner.src=fn[frameNumber].src;
    ???? var inv=interval;
    ?????var imageChoice=frameNumber+1;
    ???? ?if(imageChoice==fn.length){
    ??????? ?imageChoice=0;
    ???? }
    ???? imgno=frameNumber;
    ???? firstno=imgno;
    ???? player1=window.setTimeout("rotateBanner("+imageChoice+","+inv+")",inv);
    ?? }
    ?? 通過代碼可以看出,rotateBanner1方法其實在下拉框選項改變觸發的時候只執行了一次,因為最后一行調用的還是原來的rotateBanner()方法,這個代碼的當時寫的時候很有戲劇性,嘻嘻。
    ?? 其實這個幻燈片還是很簡單的,大家只要動動腦,不難寫出來。。。那天看一個人物傳記,sun公司的前任首席科學家Bill Joy,一天編程能編14個小時。。。。:)。。。腦子越用越靈活,啥也不說了,向他學習,學習,再學習。
    ?? 哈哈,明年再接著blog了。。。。。

    posted @ 2006-12-31 20:28 sugo 閱讀(791) | 評論 (1)編輯 收藏

    ?????? ?今天無意中發現了一個叫做Apusic的應用服務器,仔細一看,是中國自己開發的應用服務器,想到是中國自己開發的東西,一定要支持一下。不過在搜索Apusic的時候,發現了不少負面的消息。先不管那么多了,通過一個鏈接下載了最新的5.0的版本,不過是個免安裝的試用版。配置很簡單,只需在bin目錄的setenv.cmd中編輯APUSIC_HOME(解壓后所在目錄)和 JAVA_HOME(jdk所在目錄),不過還需要把jdk目錄下lib文件夾的tools.jar復制到APUSIC_HOME的lib目錄下面,網上沒有這么介紹,但如果不這樣做的話,運行不成功。至少我是這樣。
    ???????? 地址欄輸入http://localhost:6888/就可以訪問了。
    ???????? 想要發布自己的web應用,我是先把web應用打包為war文件,然后放入到applications目錄下面。然后在config目錄的server.xml中添加了部署這個web應用的一段話--<application name="test.war" base="解壓目錄\applications\test.war" start="auto"/>。地址欄輸入http://localhost:6888/test 就能成功訪問了。
    ??????? 運行了一下,速度還可以。性能方面還需要長期的測試和觀察。

    posted @ 2006-09-12 21:34 sugo 閱讀(540) | 評論 (0)編輯 收藏

    主站蜘蛛池模板: 免费手机在线看片| 亚洲久热无码av中文字幕| 人体大胆做受免费视频| 国产精品国产免费无码专区不卡 | 国产四虎免费精品视频| 亚洲精品自产拍在线观看动漫| 中文成人久久久久影院免费观看| 亚洲码国产精品高潮在线| aaa毛片视频免费观看| 亚洲熟妇av一区二区三区| 女人隐私秘视频黄www免费| 亚洲av午夜福利精品一区人妖| 在线播放免费人成毛片乱码| 久久亚洲免费视频| 91成人免费观看| 国产成人精品日本亚洲专一区 | 色老头永久免费网站| 亚洲国产片在线观看| 午夜寂寞在线一级观看免费| 日韩成人精品日本亚洲| 亚洲综合在线另类色区奇米| 免费a级毛片无码a∨免费软件| 夜夜亚洲天天久久| 欧美大尺寸SUV免费| 亚洲日韩在线中文字幕综合 | 久久国产乱子精品免费女| 日韩精品一区二区亚洲AV观看| 久久不见久久见免费影院| 免费观看四虎精品成人| 久久香蕉国产线看观看亚洲片 | 一本久到久久亚洲综合| 久9久9精品免费观看| 亚洲人av高清无码| 中文字幕人成人乱码亚洲电影| 国产2021精品视频免费播放| 亚洲.国产.欧美一区二区三区| 中文字幕亚洲综合久久男男| 亚洲w码欧洲s码免费| 美女被爆羞羞网站免费| 亚洲日韩区在线电影| 国产精品视_精品国产免费 |