Sugo

Goof off ? no way: never
posts - 20, comments - 8, trackbacks - 73, articles - 1
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

2007年1月24日

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 阅读(1385) | 评论 (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 阅读(360) | 评论 (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 阅读(408) | 评论 (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 阅读(362) | 评论 (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 阅读(2246) | 评论 (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 阅读(311) | 评论 (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 阅读(1496) | 评论 (0)编辑 收藏