??xml version="1.0" encoding="utf-8" standalone="yes"?>久久久久av,在线播放三级网站,这里只有视频精品http://www.aygfsteel.com/needjava/category/21490.htmlYou Need Java, Like World Need Sun.zh-cnMon, 17 Sep 2007 18:08:12 GMTMon, 17 Sep 2007 18:08:12 GMT60〔Java〕〔Swing〕关闭前提醒http://www.aygfsteel.com/needjava/archive/2007/09/17/146007.htmlNeedJavaNeedJavaMon, 17 Sep 2007 14:56:00 GMThttp://www.aygfsteel.com/needjava/archive/2007/09/17/146007.htmlhttp://www.aygfsteel.com/needjava/comments/146007.htmlhttp://www.aygfsteel.com/needjava/archive/2007/09/17/146007.html#Feedback0http://www.aygfsteel.com/needjava/comments/commentRss/146007.htmlhttp://www.aygfsteel.com/needjava/services/trackbacks/146007.html import java.awt.Toolkit;
import java.awt.Dimension;

import java.awt.event.WindowEvent;
import java.awt.event.WindowAdapter;

import javax.swing.JFrame;
import javax.swing.JOptionPane;


/*******************************************************************************
 *
 * 关闭前提?br /> *
 * Author: NeedJava
 *
 * Modofied: 2005.04.02
 *
 ******************************************************************************/
class AlarmBeforeClosed extends JFrame
{
  public AlarmBeforeClosed( String title )
  {
    //讄E序标题?br />    this.setTitle( title );

    //不给最大化
    this.setResizable( false );

    //讄E序界面大小
    this.setSize( new Dimension( 500, 400 ) );

    //程序居中放|(Ҏ1Q?br />    Dimension paneSize=this.getSize();
    Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();
    this.setLocation( ( screenSize.width-paneSize.width )/2, ( screenSize.height-paneSize.height )/2 );

    //程序居中放|(Ҏ2Q?br />    //this.setLocationRelativeTo( null );

    //讄E序关闭的类型,防止关闭
    this.setDefaultCloseOperation( JFrame.DO_NOTHING_ON_CLOSE );

    //讄关闭E序
    this.addWindowListener( new WindowAdapter()
    {
      public void windowClosing( WindowEvent e )
      {
        closeApplication();
      }
    } );
  }


  /*****************************************************************************
   *
   * 关闭E序
   *
   ****************************************************************************/
  private void closeApplication()
  {
    Toolkit.getDefaultToolkit().beep();

    int answer=JOptionPane.showConfirmDialog( AlarmBeforeClosed.this,
                                              "您真的要退出此pȝQ?,
                                              "退出程?,
                                              JOptionPane.YES_NO_OPTION,
                                              JOptionPane.QUESTION_MESSAGE,
                                              null );

    if( answer==JOptionPane.YES_OPTION )  //选择“是?br />      {
        System.exit( 0 );
      }
    else if( answer==JOptionPane.NO_OPTION )  //选择“否?br />           {
             return;
           }
  }


  /*****************************************************************************
   *
   * 入口ȝ?br />   *
   ****************************************************************************/
  public static void main( String[] args )
  {
    new AlarmBeforeClosed( "关闭前提? ).setVisible( true );
  }
}



NeedJava 2007-09-17 22:56 发表评论
]]>
〔Java〕乘除法和等效的位运?/title><link>http://www.aygfsteel.com/needjava/archive/2007/09/17/145706.html</link><dc:creator>NeedJava</dc:creator><author>NeedJava</author><pubDate>Mon, 17 Sep 2007 01:17:00 GMT</pubDate><guid>http://www.aygfsteel.com/needjava/archive/2007/09/17/145706.html</guid><wfw:comment>http://www.aygfsteel.com/needjava/comments/145706.html</wfw:comment><comments>http://www.aygfsteel.com/needjava/archive/2007/09/17/145706.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.aygfsteel.com/needjava/comments/commentRss/145706.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/needjava/services/trackbacks/145706.html</trackback:ping><description><![CDATA[ <p> <font face="Courier New" color="#808080" size="2">/*******************************************************************************<br /> *<br /> * 乘除法和{效的位q算<br /> *<br /> * 1024 = 2*2*2*2*2*2*2*2*2*2 = 100 0000 0000<br /> *<br /> ******************************************************************************/<br />class BitOperation<br />{<br />  public static void main( String[] args )<br />  {<br />    //被除?br />    long dividend=182495073L;</font> </p> <p> <font face="Courier New" color="#808080" size="2">    long temp=0L;</font> </p> <p> <font face="Courier New" color="#808080" size="2">    long begin=0L;</font> </p> <p> <br /> <font face="Courier New" color="#808080" size="2">    ////////////////////////////////////////////////////////////////////////////<br />    //<br />    // dividend/1024{效于dividend>>10<br />    //<br />    ////////////////////////////////////////////////////////////////////////////<br />    begin=System.currentTimeMillis();</font> </p> <p> <font face="Courier New" color="#808080" size="2">    for( int i=0; i<10000000; i++ )<br />       {<br />         temp=dividend/1024;<br />       }</font> </p> <p> <font face="Courier New" color="#808080" size="2">    System.out.println( temp+" d耗时Q?+( System.currentTimeMillis()-begin )+"毫秒" );</font> </p> <p> <font face="Courier New" color="#808080" size="2">    begin=System.currentTimeMillis();</font> </p> <p> <font face="Courier New" color="#808080" size="2">    for( int i=0; i<10000000; i++ )<br />       {<br />         temp=dividend>>10;<br />       }</font> </p> <p> <font face="Courier New" color="#808080" size="2">    System.out.println( temp+" d耗时Q?+( System.currentTimeMillis()-begin )+"毫秒\r\n" );</font> </p> <p> <br /> <font face="Courier New" color="#808080" size="2">    ////////////////////////////////////////////////////////////////////////////<br />    //<br />    // dividend*1024{效于dividend<<10<br />    //<br />    ////////////////////////////////////////////////////////////////////////////<br />    begin=System.currentTimeMillis();</font> </p> <p> <font face="Courier New" color="#808080" size="2">    for( int i=0; i<10000000; i++ )<br />       {<br />         temp=dividend*1024;<br />       }</font> </p> <p> <font face="Courier New" color="#808080" size="2">    System.out.println( temp+" d耗时Q?+( System.currentTimeMillis()-begin )+"毫秒" );</font> </p> <p> <font face="Courier New" color="#808080" size="2">    begin=System.currentTimeMillis();</font> </p> <p> <font face="Courier New" color="#808080" size="2">    for( int i=0; i<10000000; i++ )<br />       {<br />         temp=dividend<<10;<br />       }</font> </p> <p> <font face="Courier New" color="#808080" size="2">    System.out.println( temp+" d耗时Q?+( System.currentTimeMillis()-begin )+"毫秒\r\n" );</font> </p> <p> <br /> <font face="Courier New" color="#808080" size="2">    ////////////////////////////////////////////////////////////////////////////<br />    //<br />    // dividend%1024{效于dividend-( dividend>>10<<10 )<br />    //<br />    ////////////////////////////////////////////////////////////////////////////<br />    begin=System.currentTimeMillis();</font> </p> <p> <font face="Courier New" color="#808080" size="2">    for( int i=0; i<10000000; i++ )<br />       {<br />         temp=dividend%1024;<br />       }</font> </p> <p> <font face="Courier New" color="#808080" size="2">    System.out.println( temp+" d耗时Q?+( System.currentTimeMillis()-begin )+"毫秒" );</font> </p> <p> <font face="Courier New" color="#808080" size="2">    begin=System.currentTimeMillis();</font> </p> <p> <font face="Courier New" color="#808080" size="2">    for( int i=0; i<10000000; i++ )<br />       {<br />         temp=dividend-( dividend>>10<<10 );<br />       }</font> </p> <p> <font face="Courier New" color="#808080" size="2">    System.out.println( temp+" d耗时Q?+( System.currentTimeMillis()-begin )+"毫秒\r\n" );<br />  }<br />}</font> </p> <img src ="http://www.aygfsteel.com/needjava/aggbug/145706.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/needjava/" target="_blank">NeedJava</a> 2007-09-17 09:17 <a href="http://www.aygfsteel.com/needjava/archive/2007/09/17/145706.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>〔Java〕用Integer.toString( 1000 )好于1000+""http://www.aygfsteel.com/needjava/archive/2007/09/17/145665.htmlNeedJavaNeedJavaSun, 16 Sep 2007 17:23:00 GMThttp://www.aygfsteel.com/needjava/archive/2007/09/17/145665.htmlhttp://www.aygfsteel.com/needjava/comments/145665.htmlhttp://www.aygfsteel.com/needjava/archive/2007/09/17/145665.html#Feedback8http://www.aygfsteel.com/needjava/comments/commentRss/145665.htmlhttp://www.aygfsteel.com/needjava/services/trackbacks/145665.html 我原来把数字变成字符Ԍ使用""+1000Q但是经q测试,发现Q,Q呵呵,你自己测试吧Q?br />
public final class WhoFaster2
{
  public static void main( String[] args )
  {
    long times=1000000L;  //百万

    long start=0L;

    String temp=null;

    /*/
    start=System.currentTimeMillis();

    temp=null;

    for( int i=0; i<times; i++ )
       {
         temp=times+"";
       }

    System.out.println( temp+" "+( System.currentTimeMillis()-start ) );
    /*/
    start=System.currentTimeMillis();

    temp=null;

    for( int i=0; i<times; i++ )
       {
         temp=Long.toString( times );
       }

    System.out.println( temp+" "+( System.currentTimeMillis()-start ) );
    //*/
  }
}



NeedJava 2007-09-17 01:23 发表评论
]]>
〔Java〕看看谁ȝ?/title><link>http://www.aygfsteel.com/needjava/archive/2007/09/17/145663.html</link><dc:creator>NeedJava</dc:creator><author>NeedJava</author><pubDate>Sun, 16 Sep 2007 17:02:00 GMT</pubDate><guid>http://www.aygfsteel.com/needjava/archive/2007/09/17/145663.html</guid><wfw:comment>http://www.aygfsteel.com/needjava/comments/145663.html</wfw:comment><comments>http://www.aygfsteel.com/needjava/archive/2007/09/17/145663.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/needjava/comments/commentRss/145663.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/needjava/services/trackbacks/145663.html</trackback:ping><description><![CDATA[ <p> <font face="Courier New" color="#808080" size="2">刚刚写的看谁复制的快Q只是由于在目中犹豫到底是用哪个好而写的,没想到大家很感兴,那我再把d文g谁快也翻上来Q有错尽拍砖?br /><br />另外Q最好能攑֜有上万张10KB以上的图片的文g夹下q行Q否则不一定看出效果,我的是六千多张,10240L取胜?br /><br />import java.io.File;<br />import java.io.IOException;<br />import java.io.FileInputStream;<br />import java.io.FileNotFoundException;</font> </p> <p> <br /> <font face="Courier New" color="#808080" size="2">/*******************************************************************************<br /> *<br /> *<br /> * Author: NeedJava<br /> *<br /> * Modified: 2007.08.26<br /> *<br /> ******************************************************************************/<br />public final class ReadFaster<br />{<br />  /*****************************************************************************<br />   *<br />   * 构造函敎ͼ默认使用当前路径<br />   *<br />   ****************************************************************************/<br />  public ReadFaster()<br />  {<br />    this( "." );<br />  }</font> </p> <p> <font face="Courier New" color="#808080" size="2">  public ReadFaster( String fileName )<br />  {<br />    this.listPictures( null, fileName );<br />  }</font> </p> <p> <br /> <font face="Courier New" color="#808080" size="2">  /*****************************************************************************<br />   *<br />   * 列出当前目录下的文g列表Q包括文件和文g?br />   *<br />   ****************************************************************************/<br />  private final void listPictures( File path, String fileName )<br />  {<br />    File file=new File( path, fileName );</font> </p> <p> <font face="Courier New" color="#808080" size="2">    if( file.isDirectory() )<br />      {<br />        //得到当前目录下的文g列表Q包括文件和文g?br />        String[] children=file.list();</font> </p> <p> <font face="Courier New" color="#808080" size="2">        //如果子集为空Q就攑ּ后面的操?br />        if( children==null )<br />          {<br />            return;<br />          }</font> </p> <p> <font face="Courier New" color="#808080" size="2">        //排序<br />        //java.util.Arrays.sort( children );</font> </p> <p> <font face="Courier New" color="#808080" size="2">        //如果子集不ؓI,则显C?br />        for( int i=0; i<children.length; i++ )<br />           {<br />             listPictures( file, children[i] );<br />           }<br />      }<br />    else if( file.isFile() )<br />           {<br />             if( isPictureSuffix( file.getPath() ) )<br />               {<br />                 readPicture( file );<br />               }<br />           }<br />  }</font> </p> <p> <br /> <font face="Courier New" color="#808080" size="2">  /*****************************************************************************<br />   *<br />   * Ҏ后缀名判断是否是有效的图片,q且q回写的后~?br />   *<br />   ****************************************************************************/<br />  private final boolean isPictureSuffix( String fileName )<br />  {<br />    if( fileName==null )<br />      {<br />        return false;<br />      }</font> </p> <p> <font face="Courier New" color="#808080" size="2">    int length=fileName.length();</font> </p> <p> <font face="Courier New" color="#808080" size="2">    //可能存在?jpg”这L文gQ即4个字W?br />    if( length>=4 )<br />      {<br />        char c=fileName.charAt( length-4 );</font> </p> <p> <font face="Courier New" color="#808080" size="2">        if( c=='.' )<br />          {<br />            c=fileName.charAt( length-3 );</font> </p> <p> <font face="Courier New" color="#808080" size="2">            if( c=='j'||c=='J' )<br />              {<br />                c=fileName.charAt( length-2 );</font> </p> <p> <font face="Courier New" color="#808080" size="2">                if( c=='p'||c=='P' )<br />                  {<br />                    c=fileName.charAt( length-1 );</font> </p> <p> <font face="Courier New" color="#808080" size="2">                    if( c=='g'||c=='G' )<br />                      {<br />                        return true;<br />                      }<br />                    else if( c=='e'||c=='E' )<br />                           {<br />                             return true;<br />                           }<br />                  }<br />              }<br />            else if( c=='t'||c=='T' )<br />                   {<br />                     c=fileName.charAt( length-2 );</font> </p> <p> <font face="Courier New" color="#808080" size="2">                     if( c=='i'||c=='I' )<br />                       {<br />                         c=fileName.charAt( length-1 );</font> </p> <p> <font face="Courier New" color="#808080" size="2">                         if( c=='f'||c=='F' )<br />                           {<br />                             return true;<br />                           }<br />                       }<br />                   }<br />          }<br />        else if( c=='j'||c=='J' )<br />               {<br />                 c=fileName.charAt( length-3 );</font> </p> <p> <font face="Courier New" color="#808080" size="2">                 if( c=='p'||c=='P' )<br />                   {<br />                     c=fileName.charAt( length-2 );</font> </p> <p> <font face="Courier New" color="#808080" size="2">                     if( c=='e'||c=='E' )<br />                       {<br />                         c=fileName.charAt( length-1 );</font> </p> <p> <font face="Courier New" color="#808080" size="2">                         if( c=='g'||c=='G' )<br />                           {<br />                             return true;<br />                           }<br />                       }<br />                   }<br />                 else if( c=='f'||c=='F' )<br />                        {<br />                          c=fileName.charAt( length-2 );</font> </p> <p> <font face="Courier New" color="#808080" size="2">                          if( c=='i'||c=='I' )<br />                            {<br />                              c=fileName.charAt( length-1 );</font> </p> <p> <font face="Courier New" color="#808080" size="2">                              if( c=='f'||c=='F' )<br />                                {<br />                                  return true;<br />                                }<br />                            }<br />                        }<br />               }<br />        else if( c=='t'||c=='T' )<br />               {<br />                 c=fileName.charAt( length-3 );</font> </p> <p> <font face="Courier New" color="#808080" size="2">                 if( c=='i'||c=='I' )<br />                   {<br />                     c=fileName.charAt( length-2 );</font> </p> <p> <font face="Courier New" color="#808080" size="2">                     if( c=='f'||c=='F' )<br />                       {<br />                         c=fileName.charAt( length-1 );</font> </p> <p> <font face="Courier New" color="#808080" size="2">                         if( c=='f'||c=='F' )<br />                           {<br />                             return true;<br />                           }<br />                       }<br />                   }</font> </p> <p> <font face="Courier New" color="#808080" size="2">               }<br />      }</font> </p> <p> <font face="Courier New" color="#808080" size="2">    return false;<br />  }</font> </p> <p> <br /> <font face="Courier New" color="#808080" size="2">  /*****************************************************************************<br />   *<br />   * 大于10240的,每次?024?048<br />   *<br />   * 于10240的,?0240一ơ即?br />   *<br />   ****************************************************************************/<br />  private final String readPicture( File file )<br />  {<br />    try{ FileInputStream fis=new FileInputStream( file );</font> </p> <p> <font face="Courier New" color="#808080" size="2">         //于10K的忽?br />         if( fis.available()<10240 )<br />           {<br />             return "";<br />           }</font> </p> <p> <font face="Courier New" color="#808080" size="2">         long num=0L;</font> </p> <p> <font face="Courier New" color="#808080" size="2">         //Buffered的默认有2048?192</font> </p> <p> <font face="Courier New" color="#808080" size="2">         //*/ No.1<br />         byte[] buffer=new byte[10240];</font> </p> <p> <font face="Courier New" color="#808080" size="2">         if( fis.read( buffer )==10240 )<br />           {<br />             for( int i=0; i<10240; i++ )<br />                {<br />                  num++;<br />                }<br />           }<br />         //*/</font> </p> <p> <font face="Courier New" color="#808080" size="2">         /*/ No.3<br />         byte[] buffer=new byte[5120];</font> </p> <p> <font face="Courier New" color="#808080" size="2">         for( int j=0; j<2; j++ )<br />            {<br />              if( fis.read( buffer )==5120 )<br />                {<br />                  for( int i=0; i<5120; i++ )<br />                     {<br />                       num++;<br />                     }<br />                }<br />            }<br />         //*/</font> </p> <p> <font face="Courier New" color="#808080" size="2">         /*/ No.2<br />         byte[] buffer=new byte[2048];</font> </p> <p> <font face="Courier New" color="#808080" size="2">         for( int j=0; j<5; j++ )<br />            {<br />              if( fis.read( buffer )==2048 )<br />                {<br />                  for( int i=0; i<2048; i++ )<br />                     {<br />                       num++;<br />                     }<br />                }<br />            }<br />         //*/</font> </p> <p> <font face="Courier New" color="#808080" size="2">         /*/ No.4<br />         byte[] buffer=new byte[1024];</font> </p> <p> <font face="Courier New" color="#808080" size="2">         for( int j=0; j<10; j++ )<br />            {<br />              if( fis.read( buffer )==1024 )<br />                {<br />                  for( int i=0; i<1024; i++ )<br />                     {<br />                       num++;<br />                     }<br />                }<br />            }<br />         //*/</font> </p> <p> <font face="Courier New" color="#808080" size="2">         fis.close();<br />       }<br />     catch( FileNotFoundException fnfe )<br />          {<br />            fnfe.printStackTrace();<br />          }<br />     catch( IOException ioe )<br />          {<br />            ioe.printStackTrace();<br />          }<br />     catch( Exception e )<br />          {<br />            e.printStackTrace();<br />          }</font> </p> <p> <font face="Courier New" color="#808080" size="2">     return "";<br />  }</font> </p> <p> <br /> <font face="Courier New" color="#808080" size="2">  /*****************************************************************************<br />   *<br />   * d数入?br />   *<br />   ****************************************************************************/<br />  public static void main( String[] args )<br />  {<br />    try{ long begin=System.currentTimeMillis();</font> </p> <p> <font face="Courier New" color="#808080" size="2">         ReadFaster rf=new ReadFaster();</font> </p> <p> <font face="Courier New" color="#808080" size="2">         System.out.println( "d耗时Q?+( System.currentTimeMillis()-begin )+"毫秒\r\n" );<br />       }<br />    catch( Exception e )<br />         {<br />           e.printStackTrace();<br />         }<br />  }<br />}</font> </p> <img src ="http://www.aygfsteel.com/needjava/aggbug/145663.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/needjava/" target="_blank">NeedJava</a> 2007-09-17 01:02 <a href="http://www.aygfsteel.com/needjava/archive/2007/09/17/145663.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>〔Java〕中文变?/title><link>http://www.aygfsteel.com/needjava/archive/2007/09/16/145636.html</link><dc:creator>NeedJava</dc:creator><author>NeedJava</author><pubDate>Sun, 16 Sep 2007 13:42:00 GMT</pubDate><guid>http://www.aygfsteel.com/needjava/archive/2007/09/16/145636.html</guid><wfw:comment>http://www.aygfsteel.com/needjava/comments/145636.html</wfw:comment><comments>http://www.aygfsteel.com/needjava/archive/2007/09/16/145636.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.aygfsteel.com/needjava/comments/commentRss/145636.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/needjava/services/trackbacks/145636.html</trackback:ping><description><![CDATA[ <font face="Courier New"> <font size="2"> <font color="#808080">public class l结?br />{<br />  public static void main( String[] args )<br />  {<br />    for( int l结?1; l结?lt;=100; l结?+ )<br />       {<br />         System.out.println( l结?);<br />       }<br />  }<br />} <br /><br /></font> <font color="#808080">注意Q不是所有的中文都支持?<br /><br />你是不是惛_了؜淆?Q?q可不是易语aQ呵c?br /><br /></font> </font> </font> <img src ="http://www.aygfsteel.com/needjava/aggbug/145636.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/needjava/" target="_blank">NeedJava</a> 2007-09-16 21:42 <a href="http://www.aygfsteel.com/needjava/archive/2007/09/16/145636.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>〔Java〕比较赋gSystem.arraycopy谁快http://www.aygfsteel.com/needjava/archive/2007/09/16/145513.htmlNeedJavaNeedJavaSun, 16 Sep 2007 05:42:00 GMThttp://www.aygfsteel.com/needjava/archive/2007/09/16/145513.htmlhttp://www.aygfsteel.com/needjava/comments/145513.htmlhttp://www.aygfsteel.com/needjava/archive/2007/09/16/145513.html#Feedback7http://www.aygfsteel.com/needjava/comments/commentRss/145513.htmlhttp://www.aygfsteel.com/needjava/services/trackbacks/145513.html /*******************************************************************************
 *
 * 比较赋gSystem.arraycopy谁快
 *
 * 复制的内容越多,System.arraycopy优势更明?br /> *
 * Author: NeedJava
 *
 * Modified: 2007.09.16
 *
 ******************************************************************************/
public final class WhoFaster
{
  public static void main( String[] args )
  {
    /*/
    int begin=100;

    int length=12;

    String temp="12345678901234567890"
               +"12345678901234567890"
               +"12345678901234567890"
               +"12345678901234567890"
               +"12345678901234567890"
               +"黑客帝国忍者神龟变形金?
               +"12345678901234567890"
               +"12345678901234567890"
               +"12345678901234567890"
               +"12345678901234567890"
               +"12345678901234567890";

    int times=10000000;  //千万
    /*/
    int begin=100;

    int length=120;

    String temp="12345678901234567890"
               +"12345678901234567890"
               +"12345678901234567890"
               +"12345678901234567890"
               +"12345678901234567890"
               +"黑客帝国忍者神龟变形金?
               +"黑客帝国忍者神龟变形金?
               +"黑客帝国忍者神龟变形金?
               +"黑客帝国忍者神龟变形金?
               +"黑客帝国忍者神龟变形金?
               +"黑客帝国忍者神龟变形金?
               +"黑客帝国忍者神龟变形金?
               +"黑客帝国忍者神龟变形金?
               +"黑客帝国忍者神龟变形金?
               +"黑客帝国忍者神龟变形金?
               +"12345678901234567890"
               +"12345678901234567890"
               +"12345678901234567890"
               +"12345678901234567890"
               +"12345678901234567890";

    int times=1000000;  //百万
    //*/

    char[] oldArray=temp.toCharArray();

    char[] newArray=null;

    long start=0L;


    ////////////////////////////////////////////////////////////////////////////
    //
    // 单纯赋?br />    //
    ////////////////////////////////////////////////////////////////////////////
    newArray=new char[length];

    start=System.currentTimeMillis();

    for( int i=0; i<times; i++ )
       {
         for( int j=0; j<length; j++ )
            {
              newArray[j]=oldArray[begin+j];
            }
       }

    System.out.println( new String( newArray )+" "+( System.currentTimeMillis()-start ) );


    ////////////////////////////////////////////////////////////////////////////
    //
    // System.arraycopy
    //
    ////////////////////////////////////////////////////////////////////////////
    newArray=new char[length];

    start=System.currentTimeMillis();

    for( int i=0; i<times; i++ )
       {
         System.arraycopy( oldArray, begin, newArray, 0, length );
       }

    System.out.println( new String( newArray )+" "+( System.currentTimeMillis()-start ) );
  }
}



NeedJava 2007-09-16 13:42 发表评论
]]>
〔Java〕对数字或文件名排列http://www.aygfsteel.com/needjava/archive/2007/09/14/145003.htmlNeedJavaNeedJavaThu, 13 Sep 2007 16:17:00 GMThttp://www.aygfsteel.com/needjava/archive/2007/09/14/145003.htmlhttp://www.aygfsteel.com/needjava/comments/145003.htmlhttp://www.aygfsteel.com/needjava/archive/2007/09/14/145003.html#Feedback0http://www.aygfsteel.com/needjava/comments/commentRss/145003.htmlhttp://www.aygfsteel.com/needjava/services/trackbacks/145003.html

/*******************************************************************************
 *
 * Ҏ字或文g名排?br /> *
 * 没有考虑汉字昄时占两个位置的情况,卛_文g名处理不太好
 *
 * Author: NeedJava
 *
 * Modified: 2007.09.09
 *
 ******************************************************************************/

public final class DotAlign
{
  private DotAlign(){}

  private static final String align( String string,
                                     char prefix,
                                     char suffix,
                                     int prefixLength,
                                     int suffixLength,
                                     boolean isNumber )
  {
    if( string==null||string.equals( "" )||string.equals( "." )||prefixLength<0||suffixLength<0 )
      {
        return string;
      }

    //如果没有数Q那么按照常理,数点也应该省略
    char[] buffer=new char[( suffixLength>0 ? prefixLength+1+suffixLength : prefixLength )];

    int stringLength=string.length();

    int dot=stringLength-1;

    //扑ֈ数点位|,可以用lastIndexOf()代替
    while( dot>-1 )
         {
           if( string.charAt( dot-- )=='.' )
             {
               dot++;

               break;
             }
         }

    //System.out.print( Integer.toString( dot )+"\t" );

    //★整数部分,从小数点左位向左U?br />    int pointer=( dot>-1 ? dot-1 : stringLength-1 );

    for( int i=prefixLength-1; i>-1; i-- )
       {
         if( pointer>-1 )
           {
             buffer[i]=string.charAt( pointer-- );
           }
         else{ buffer[i]=prefix;
             }
       }

    //如果没有数部分Q那么按照常理,数点应该省?br />    if( suffixLength>0 )
      {
        //★小数点
        buffer[prefixLength]=( dot>-1||isNumber ? '.' : suffix );

        //★小数部分,从小数点右位向右U?br />        pointer=( dot>-1 ? dot+1 : stringLength );

        for( int i=prefixLength+1; i<buffer.length; i++ )
           {
             if( pointer<stringLength )
               {
                 buffer[i]=string.charAt( pointer++ );
               }
             else{ buffer[i]=suffix;
                 }
           }
      }

    return new String( buffer );
  }


  public final static void main( String[] args )
  {
    System.out.println( "\r\n-------------------------------------------\r\n" );

    String[] number={ "",
                      ".",
                      ".5",
                      ".56",
                      ".567",
                      ".5678",
                      "1234",
                      "1234.",
                      "1234.5",
                      "1234.56",
                      "1234.567",
                      "1234.5678" };

    for( int i=0; i<number.length; i++ )
       {
         System.out.println( "["+DotAlign.align( number[i], ' ', '0', 7, 2, true )+"]   ["+number[i]+"]" );
       }

    System.out.println( "\r\n-------------------------------------------\r\n" );

    String[] file={ "",
                    ".",
                    ".j",
                    ".jp",
                    ".jpe",
                    ".jpeg",
                    "1234",
                    "1234.",
                    "1234.j",
                    "1234.jp",
                    "1234.jpe",
                    "1234.jpeg" };

    for( int i=0; i<file.length; i++ )
       {
         System.out.println( "["+DotAlign.align( file[i], ' ', ' ', 7, 5, false )+"]   ["+file[i]+"]" );
       }

    System.out.println( "\r\n-------------------------------------------\r\n" );
  }
}



NeedJava 2007-09-14 00:17 发表评论
]]>
〔Java〕〔SWT〕分析RSSOwl如何做到只运行一个实例,q且可以Ȁz?/title><link>http://www.aygfsteel.com/needjava/archive/2007/09/01/141959.html</link><dc:creator>NeedJava</dc:creator><author>NeedJava</author><pubDate>Sat, 01 Sep 2007 09:03:00 GMT</pubDate><guid>http://www.aygfsteel.com/needjava/archive/2007/09/01/141959.html</guid><wfw:comment>http://www.aygfsteel.com/needjava/comments/141959.html</wfw:comment><comments>http://www.aygfsteel.com/needjava/archive/2007/09/01/141959.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/needjava/comments/commentRss/141959.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/needjava/services/trackbacks/141959.html</trackback:ping><description><![CDATA[ <p> <font face="Courier New" color="#808080" size="2">前几天自己发表的只运行一个实例的文章Q感谢Pande的留意,q提出宝贉|见,他推荐的正好是我x的RSSOwl源码Q以下是我分析RSSOwl如何做到只运行一个实例ƈ且激zȝQ如有错误,h砖?br /></font> <a > <br /> </a> </p> <p> <a > <font face="Courier New" color="#808080" size="2">http://sourceforge.krugle.com/kse/files/cvs/cvs.sourceforge.net/rssowl/RSSOwl/src/java/net/sourceforge/rssowl/controller/RSSOwlLoader.java</font> </a> </p> <p> <font face="Courier New" color="#808080" size="2">Ҏ RSSOwlLoader.java 中的</font> </p> <p> <font face="Courier New" color="#808080" size="2">[code]<br />private static void startupProcess( String[] args )<br />{ <br />  ...</font> </p> <p> <font face="Courier New" color="#808080" size="2">  if( !System.getProperties().containsKey( PROPERTY_ALLOW_MULTI_INSTANCES )&&<font color="#ff0000">StartupManager.isRSSOwlRunning( feedArgument )</font> )</font> </p> <p> <font face="Courier New" color="#808080" size="2">  ...</font> </p> <p> <font face="Courier New" color="#808080" size="2">}<br />[/code]</font> </p> <p> <font face="Courier New" color="#808080" size="2">q踪?StartupManager.java 见下Q?/font> </p> <p> <a > <font face="Courier New" color="#808080" size="2">http://sourceforge.krugle.com/kse/files/cvs/cvs.sourceforge.net/rssowl/RSSOwl/src/java/net/sourceforge/rssowl/controller/thread/StartupManager.java</font> </a> </p> <p> <font face="Courier New" color="#808080" size="2">q踪?StartupManager.isRSSOwlRunning( String message ) 用途ؓ建立ServerSocketQ监听本?794端口</font> </p> <p> <font face="Courier New" color="#808080" size="2">[code]<br />static ServerSocket applLockSocket;</font> </p> <p> <font face="Courier New" color="#808080" size="2">public static boolean isRSSOwlRunning( String message )<br />{ </font> </p> <p> <font face="Courier New" color="#ff0000" size="2">  try{ applLockSocket=new ServerSocket( 8794, 50, InetAddress.getByName( "127.0.0.1" ) );  //1987q??日出生?</font> </p> <p> <font face="Courier New" color="#ff0000" size="2">       handleSocketUnBound();  //</font> </p> <p> <font face="Courier New" color="#808080" size="2"> <font color="#ff0000">       return false;<br /></font>     } <br />  catch( java.net.BindException e )    //Another instance already running<br />       { <br />         ...</font> </p> <p> <font face="Courier New" color="#ff0000" size="2">         handleSocketBound( message );  //</font> </p> <p> <font face="Courier New" color="#808080" size="2"> <font color="#ff0000">         return true;<br /></font>       }  <br />  catch( IOException e )  //Other Error<br />       { <br />         ...</font> </p> <p> <font face="Courier New" color="#808080" size="2">         return false;<br />       }<br />} <br />[/code]</font> </p> <p> <font face="Courier New" color="#808080" size="2">q踪?StartupManager.handleSocketUnBound() ?StartupManager.handleSocketBound( String message )</font> </p> <p> <font face="Courier New" color="#808080" size="2">[code]<br />private static void handleSocketBound( String message )<br />{<br />  Socket socket;</font> </p> <p> <font face="Courier New" color="#808080" size="2">  try{ socket=new Socket( InetAddress.getByName( "127.0.0.1" ), 8794 );</font> </p> <p> <font face="Courier New" color="#808080" size="2">       PrintWriter writer=new PrintWriter( new OutputStreamWriter( socket.getOutputStream() ) );</font> </p> <p> <font face="Courier New" color="#ff0000" size="2">       writer.println( ( message!=null&&message.length()>0 ) ? message : DEFAULT_MESSAGE );</font> </p> <p> <font face="Courier New" color="#808080" size="2">       writer.flush();<br />     }<br />  catch( UnknownHostException e )<br />       {<br />         ...<br />       }<br />  catch( IOException e )<br />       {<br />         ...<br />       }<br />}<br />[/code]<br /><br />[code]<br /></font> <font face="Courier New" color="#808080" size="2">/**<br /> * Server not yet running. Start it and listen for incoming messages.<br /> */<br />private static void handleSocketUnBound()<br />{<br />  listen();  //转向Qؓ了对U好看?q是Z兼容Q?br />}<br /><br /></font> <font face="Courier New" color="#808080" size="2">/**<br /> * Listen for incoming messages.看看接受的连接发送了什么内?br /> */<br />private static void listen()<br />{<br />  //Run the Server inside a Thread<br />  server=new ExtendedThread()  //extends from Thread<br />  {<br />    public void run()<br />    {<br />      while( !isStopped()&&!isInterrupted() )<br />           {<br />             BufferedReader buffReader=null;</font> </p> <p> <font face="Courier New" color="#808080" size="2">             try{ //Read a single line from the Socket<br />                  Socket socket=applLockSocket.accept();</font> </p> <p> <font face="Courier New" color="#808080" size="2">                  buffReader=new BufferedReader( new InputStreamReader( socket.getInputStream() ) );</font> </p> <p> <font face="Courier New" color="#808080" size="2">                  final String message=buffReader.readLine();</font> </p> <p> <font face="Courier New" color="#808080" size="2">                  socket.close();</font> </p> <p> <font face="Courier New" color="#808080" size="2">                  //Check the received message<br /><font color="#ff0000">                  if( ( message!=null&&message.length()>0 )&&GUI.display!=null&&!GUI.display.isDisposed() )  //ȀzL个GUI的代码在此,我们q去看看<br /></font>                    {<br />                      GUI.display.asyncExec( new Runnable()<br />                      {<br />                        public void run()<br />                        {<br />                          //Restore the RSSOwl Window and handle Message<br />                          if( GUI.isAlive() )<br />                            {<br /><font color="#ff0000">                              GUI.rssOwlGui.restoreWindow();  //扑ֈ了,转到GUI.java</font></font> </p> <p> <font face="Courier New" color="#808080" size="2">                              //Handle the message as Link if valid argument<br />                              if( RSSOwlLoader.isValidArgument( message ) )<br />                                {<br />                                  GUI.rssOwlGui.getEventManager().actionHandleSuppliedLink( message );<br />                                }<br />                            }<br />                        }<br />                      } );<br />                    }<br />                }<br />             catch( IOException e )<br />                  {<br />                    ...<br />                  }<br />             finally{ //关闭?br />                    }<br />           }<br />    }<br />  };</font> </p> <p> <font face="Courier New" color="#808080" size="2">  server.setDaemon( true );</font> </p> <p> <font face="Courier New" color="#808080" size="2">  server.setName( "Startup Manager Thread" );</font> </p> <p> <font face="Courier New" color="#808080" size="2">  server.start();<br />}<br />[/code]</font> </p> <p> <font face="Courier New" color="#808080" size="2">q踪?GUI.java 见下Q?/font> </p> <p> <a > <font face="Courier New" color="#808080" size="2">http://sourceforge.krugle.com/kse/files/cvs/cvs.sourceforge.net/rssowl/RSSOwl/src/java/net/sourceforge/rssowl/controller/GUI.java</font> </a> </p> <p> <font face="Courier New" color="#808080" size="2">q踪到GUI.restoreWindow()</font> </p> <p> <font face="Courier New" color="#808080" size="2">[code]<br />/**<br /> * Restore the application window either from taskbar or the tray.<br /> */<br />public void restoreWindow()<br />{<br />  //RSSOwl is minimized to Tray<br />  if( GlobalSettings.useSystemTray()&&rssOwlSystray!=null&&rssOwlSystray.isMinimizedToTray() )<br />    {<br />      rssOwlSystray.restoreWindow();<br />    }<br />  else{ //RSSOwl is not active<br /><font color="#ff0000">        shell.forceActive();  //是它了</font></font> </p> <p> <font face="Courier New" color="#808080" size="2">        shell.setMinimized( false );<br />      }<br />}<br />[/code]</font> </p> <p> <font size="2"> <font face="Courier New" color="#808080">原理如下Q?<br /><br /><font color="#808080">在本?794端口建立服务监听Qƈ且一直监听此端口Q试图接受此端口其它实例Q其它程序?Q发送的输入 <br /><br />如果d数据Q好像没有判断数据的合法性,仅仅判断数据不ؓI)Qƈ且自׃是“激zZ状态,“激zZ自己; <br /><br />如果建立服务监听不成功,说明已经有实例(其它E序Q)占用此端口了Q向此端口发送数据唤醒前一个实例,停几U以便前一个实例接受,然后退出?<br /><br />E序用的是SWTQ激zL法用的是shell.forceActive()Qbut it's not good for core java. <br /><br />以上分析如有不对Q恳h正?/font></font> <font color="#808080"> </font> </font> </p> <p> <br /> <br /> <font face="Courier New" color="#808080" size="2">  </font> </p> <img src ="http://www.aygfsteel.com/needjava/aggbug/141959.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/needjava/" target="_blank">NeedJava</a> 2007-09-01 17:03 <a href="http://www.aygfsteel.com/needjava/archive/2007/09/01/141959.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>〔Java〕只q行一个实例(使用System.setErr()重定向)http://www.aygfsteel.com/needjava/archive/2007/08/29/141106.htmlNeedJavaNeedJavaWed, 29 Aug 2007 14:11:00 GMThttp://www.aygfsteel.com/needjava/archive/2007/08/29/141106.htmlhttp://www.aygfsteel.com/needjava/comments/141106.htmlhttp://www.aygfsteel.com/needjava/archive/2007/08/29/141106.html#Feedback8http://www.aygfsteel.com/needjava/comments/commentRss/141106.htmlhttp://www.aygfsteel.com/needjava/services/trackbacks/141106.html 如何只运行一个实例,|上有三U方法(单模式不)Q?br />
1、占用端口(有效Q但是有端口被挪用的~陷Q?br />
2、检查文件是否存在(有效Q但H然停机可能有问题)

3、用JNIQ有效,但失可UL性)

我写的和W二个原理差不多Q判断某个文件是否被占用Qƈ且我把记录日志、保存日志、判断是否运行放在一赗?br />
你可以{载本BlogQ但是不能篡改作者名U?br />

import java.awt.event.WindowEvent;
import java.awt.event.WindowAdapter;

import java.io.File;
import java.io.IOException;
import java.io.PrintStream;
import java.io.FileOutputStream;
import java.io.FileNotFoundException;

import javax.swing.JFrame;


/*******************************************************************************
 *
 * 只运行一个实?br /> *
 * Just single instance
 *
 *
 * Author: NeedJava
 *
 * Modified: 2007.08.29
 *
 *
 * 你可以用此E序于Q何地方,但请保留E序作者及注释的完整。如果你改进了程序,
 *
 * 请在原作者后d姓名Q如QAuthor: NeedJava/Jack/MikeQ版本及修改旉同理?br /> *
 ******************************************************************************/
public final class SingleInstance
{
  /*****************************************************************************
   *
   * 构造函?br />   *
   ****************************************************************************/
  private SingleInstance()
  {
    this( "vab", ".vab", "vab" );
  }


  public SingleInstance( String filePrefixName, String fileSuffixName, String directoryName )
  {
    this.init( filePrefixName, fileSuffixName, directoryName );
  }


  /*****************************************************************************
   *
   * 原理Q?br />   *
   * 用重定向标准错误输出流定向C个日志文Ӟ占用它,使其不能被删?br />   *
   * 以后的实例试囑ְ存在的此日志文g改名q且另存为某个文件夹?br />   *
   * 如果成功Q说明没有程序占用它Q不排除你在用它Q缺PQ,正好保存日志
   *
   * 如果不成功,退出、renameTo命o有一双雕的作用
   *
   ****************************************************************************/
  private final void init( String filePrefixName, String fileSuffixName, String directoryName )
  {
    if( filePrefixName==null||fileSuffixName==null||directoryName==null )
      {
        exitWithWarning( "Error: Invalid file name.", 10 );
      }

    //We need check the fileSuffixName here? From the tail?

    String fileName=filePrefixName+fileSuffixName;

    try{ File error=new File( fileName );

         if( error.exists() )
           {
             File directory=new File( directoryName );

             String newFileName=directoryName+File.separator+convertMillisecond2DateTime( error.lastModified() )+fileSuffixName;

             //System.out.println( newFileName );

             if( directory.exists() )
               {
                 if( directory.isDirectory() )
                   {
                     //renameTo也是好东东,既可以改名,q可以移文g
                     if( !error.renameTo( new File( newFileName ) ) )
                       {
                         exitWithWarning( "Error: The instance already exists, I will exit.", 11 );
                       }
                   }
                 else{ exitWithWarning( "Error: The \'"+directoryName+"\' is not a valid directory.", 21 );
                     }
               }
             else{ if( directory.mkdirs() )
                     {
                       //renameTo也是好东东,既可以改名,q可以移文g
                       if( !error.renameTo( new File( newFileName ) ) )
                         {
                           exitWithWarning( "Error: The instance already exists, I will exit.", 11 );
                         }
                     }
                   else{ exitWithWarning( "Error: Failed to create the \'"+directoryName+"\' directory.", 22 );
                       }
                 }
           }

         //重定向标准错误输出流Q所有功能全靠它。来Q啵一?br />         System.setErr( new PrintStream( new FileOutputStream( fileName ) ) );
       }
    catch( FileNotFoundException fnfe )
         {
           //fnfe.printStackTrace();

           exitWithWarning( fnfe.toString(), 23 );
         }
    catch( IOException ioe )
         {
           //ioe.printStackTrace();

           exitWithWarning( ioe.toString(), 29 );
         }
    catch( Exception e )
         {
           //e.printStackTrace();

           exitWithWarning( e.toString(), 99 );
         }
  }


  /*****************************************************************************
   *
   * You can change the milliseconds to the date and time string here
   *
   * I just return the original
   *
   * Don't get the same string :)
   *
   ****************************************************************************/
  private final String convertMillisecond2DateTime( long millisecond )
  {
    return ""+millisecond;
  }


  /*****************************************************************************
   *
   * Return the warning and the exit code, then exit the application
   *
   ****************************************************************************/
  private final void exitWithWarning( String warning, int code )
  {
    System.out.println( warning==null ? "" : warning );

    System.exit( code );
  }


  /*****************************************************************************
   *
   * d数入?br />   *
   ****************************************************************************/
  public final static void main( String[] args )
  {
    SingleInstance si=new SingleInstance( "error", ".txt", "error" );

    final JFrame frame=new JFrame( "Just single instance. By NeedJava. 2007.08.29" );

    //I stay here, to make some friends happy.
    frame.addWindowListener( new WindowAdapter()
    {
      public void windowClosing( WindowEvent we )
      {
        frame.dispose();

        System.exit( 0 );
      }
    } );

    frame.setBounds( 200, 200, 700, 70 );

    frame.setVisible( true );
  }
}



NeedJava 2007-08-29 22:11 发表评论
]]>
〔Java〕待选框Swinghttp://www.aygfsteel.com/needjava/archive/2007/07/08/128927.htmlNeedJavaNeedJavaSun, 08 Jul 2007 14:03:00 GMThttp://www.aygfsteel.com/needjava/archive/2007/07/08/128927.htmlhttp://www.aygfsteel.com/needjava/comments/128927.htmlhttp://www.aygfsteel.com/needjava/archive/2007/07/08/128927.html#Feedback0http://www.aygfsteel.com/needjava/comments/commentRss/128927.htmlhttp://www.aygfsteel.com/needjava/services/trackbacks/128927.html import java.awt.Font;
import java.awt.Color;
import java.awt.Toolkit;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.BorderLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowAdapter;

import java.util.ArrayList;
import java.util.Enumeration;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.JComboBox;
import javax.swing.UIManager;
import javax.swing.JSplitPane;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.DefaultComboBoxModel;
import javax.swing.table.JTableHeader;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.border.EtchedBorder;
import javax.swing.border.TitledBorder;

/*********************************************************************
 *
 *
 * TableChooser.java
 *
 * Last modified: 2005-04-26
 *
 * Author: NeedJava
 *
 * E-Mail:
needjava@126.com
 *
 * Address: HeFei-AnHui-China
 *
 * Bug: 如果选中行头拖动Q会发现表体不会跟着拖动Q除非你拖动表体
 *
 * If you fixed this bug, please let us know, Thanks a lot.
 *
 *
 *********************************************************************/
class TableChooser extends JFrame
{
  private final boolean horizontal;

  private String[] tableTitle;
  private ArrayList primaryBody;
  private ArrayList prepareBody;
  private ArrayList selectBody;

  private ShowTableModel prepareModel;
  private ShowTableModel selectModel;
  private final RowHeaderModel prepareRowHeaderModel;
  private final RowHeaderModel selectRowHeaderModel;

  private final JTable prepareTable;
  private final JTable selectTable;
  private final JTable prepareRowHeaderTable;
  private final JTable selectRowHeaderTable;

  private final static int rowHeight=18;

  private final JScrollPane prepareTableJSP;
  private final JScrollPane selectTableJSP;

  private final JPanel prepareTablePanel;
  private final JPanel selectTablePanel;

  private final JSplitPane splitPane;


  /**
   *
   * 构造函?br />   *
   */
  public TableChooser( boolean horizontal )
  {
    this.horizontal=horizontal;

    //讄E序标题?br />    this.setTitle( "选择? );

    //不给最大化
    //this.setResizable( false );

    //讄E序界面大小
    this.setSize( new Dimension( 500, 400 ) );

    //程序居中放|(Ҏ1Q?br />    Dimension paneSize=this.getSize();
    Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();
    this.setLocation( ( screenSize.width-paneSize.width )/2, ( screenSize.height-paneSize.height )/2 );

    //程序居中放|(Ҏ2Q?br />    //this.setLocationRelativeTo( null );

    //讄E序关闭的类型,防止关闭
    this.setDefaultCloseOperation( JFrame.DO_NOTHING_ON_CLOSE );

    //讄关闭E序
    this.addWindowListener( new WindowAdapter()
    {
      public void windowClosing( WindowEvent e )
      {
        closeApplication();
      }
    } );

 


    //////////////////////////////
    prepareTable=new JTable();
    selectTable=new JTable();


    //为待选、已选表D|预讄l制?br />    ShowTableRenderer ShowTableRenderer=new ShowTableRenderer();
    prepareTable.setDefaultRenderer( Object.class, ShowTableRenderer );
    selectTable.setDefaultRenderer( Object.class, ShowTableRenderer );


    //讄是否可以拖动表头
    prepareTable.getTableHeader().setReorderingAllowed( false );
    selectTable.getTableHeader().setReorderingAllowed( false );


    //讄行高
    prepareTable.setRowHeight( rowHeight );
    selectTable.setRowHeight( rowHeight );

 


    //////////////////////////////
    prepareRowHeaderModel=new RowHeaderModel( 0, 1 );
    selectRowHeaderModel=new RowHeaderModel( 0, 1 );


    prepareRowHeaderTable=new JTable( prepareRowHeaderModel );
    selectRowHeaderTable=new JTable( selectRowHeaderModel );


    //为rowHeaderTable讄预设的绘制器
    prepareRowHeaderTable.setDefaultRenderer( Object.class, new RowHeaderRenderer( prepareTable ) );
    selectRowHeaderTable.setDefaultRenderer( Object.class, new RowHeaderRenderer( selectTable ) );


    //rowHeaderTable固定宽度
    prepareRowHeaderTable.setPreferredScrollableViewportSize( new Dimension( 50, 0 ) );
    selectRowHeaderTable.setPreferredScrollableViewportSize( new Dimension( 50, 0 ) );


    //讄行高
    prepareRowHeaderTable.setRowHeight( rowHeight );
    selectRowHeaderTable.setRowHeight( rowHeight );


    //防止单元格有~隙
    prepareRowHeaderTable.setIntercellSpacing( new Dimension( 0, 0 ) );
    selectRowHeaderTable.setIntercellSpacing( new Dimension( 0, 0 ) );


    //q同一个ListSelectionModelQ两边的某行同旉中
    prepareRowHeaderTable.setSelectionModel( prepareTable.getSelectionModel() );
    selectRowHeaderTable.setSelectionModel( selectTable.getSelectionModel() );

 


    //////////////////////////////
    prepareTableJSP=new JScrollPane( prepareTable, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED );
    selectTableJSP=new JScrollPane( selectTable, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED );


    //rowHeaderTable作ؓrow header加入JScrollPane的RowHeaderView区域
    prepareTableJSP.setRowHeaderView( prepareRowHeaderTable );
    selectTableJSP.setRowHeaderView( selectRowHeaderTable );


    //左上角修?br />    prepareTableJSP.setCorner( JScrollPane.UPPER_LEFT_CORNER, new RowHeaderCorner( prepareTable, "全? ) );
    selectTableJSP.setCorner( JScrollPane.UPPER_LEFT_CORNER, new RowHeaderCorner( selectTable, "全? ) );

 


    //////////////////////////////
    prepareTablePanel=new JPanel();
    selectTablePanel=new JPanel();


    prepareTablePanel.setLayout( new BorderLayout() );
    selectTablePanel.setLayout( new BorderLayout() );


    prepareTablePanel.add( prepareTableJSP, BorderLayout.CENTER );
    selectTablePanel.add( selectTableJSP, BorderLayout.CENTER );


    prepareTablePanel.setBorder( new TitledBorder( new EtchedBorder( EtchedBorder.LOWERED ), "待选h? ) );
    selectTablePanel.setBorder( new TitledBorder( new EtchedBorder( EtchedBorder.LOWERED ), "已选h? ) );


    //臛_昄6?br />    prepareTablePanel.setMinimumSize( new Dimension( 200, 150 ) );
    selectTablePanel.setMinimumSize( new Dimension( 200, 150 ) );

 


    //////////////////////////////
    if( horizontal )
      {
        splitPane=new JSplitPane( JSplitPane.HORIZONTAL_SPLIT, prepareTablePanel, selectTablePanel );
      }
    else{ splitPane=new JSplitPane( JSplitPane.VERTICAL_SPLIT, prepareTablePanel, selectTablePanel );
        }


    //拖动时显C窗口,否则只显C拖动的Ҏ
    splitPane.setContinuousLayout( true );

    //可以点三角Ş图标只显CZ个区?br />    splitPane.setOneTouchExpandable( true );

    splitPane.setDividerLocation( 210 );

    //攑֥主要面板
    this.getContentPane().add( splitPane, BorderLayout.CENTER );


    getTableModel();
  }

 

  /**
   *
   * 得到原始的TableModel
   *
   */
  private final void getTableModel()
  {
    tableTitle=new String[]{ "是否选择", "标号" };
    primaryBody=new ArrayList();
    prepareBody=new ArrayList();
    selectBody=new ArrayList();

    for( int i=1; i<21; i++ )
       {
         Object[] row=new Object[2];

         row[0]=Boolean.FALSE;  //W一列ؓ判断用的布尔|也可new Boolean( false )

         row[1]=new Double( i );

         primaryBody.add( row );  //一行搞好后Q增加进ArrayList?br />         prepareBody.add( row );  //待选内容初始ؓ原始表格
       }


    ////////////////////////////////////////////////////////////////////////
    //
    // 数据根据需求切?br />    //
    ////////////////////////////////////////////////////////////////////////
    prepareModel=new ShowTableModel( prepareBody, tableTitle )
    {
      public void setValueAt( Object value, int row, int col )
      {
        super.setValueAt( value, row, col );  //需要让父来赋?/font>

        Object rowObj = prepareBody.get( row );        //得到主表的那行内?br />        int whichRow  = selectBody.indexOf( rowObj );  //查找ơ表有没有相同的那行记录

        if( this.getValueAt( row, col ).equals( Boolean.TRUE ) )  //如果此行记录的首列内容ؓ选择
          {
            if( whichRow<0 )  //防止ơ表多次增加那行内容
              {
                selectBody.add( rowObj );
              }
          }
        else{ if( whichRow>=0 )
                {
                  selectBody.remove( whichRow );  //如果首列为取消选择Q那么次表删除那行记?br />                }
            }

        this.fireTableDataChanged();         //通告主表l构变化
        selectModel.fireTableDataChanged();  //通告ơ表l构变化

        selectRowHeaderModel.setRowCount( selectBody.size() );  //让次表行头跟着ơ表行数变化
      }
    };
    prepareTable.setModel( prepareModel );


    selectModel=new ShowTableModel( selectBody, tableTitle )
    {
      public void setValueAt( Object value, int row, int col )
      {
        super.setValueAt( value, row, col );  //需要让父来赋?/font>

        if( this.getValueAt( row, col ).equals( Boolean.FALSE ) )
          {
            selectBody.remove( row );
          }

        prepareModel.fireTableDataChanged();  //通告主表l构变化
        this.fireTableDataChanged();          //通告ơ表l构变化

        selectRowHeaderModel.setRowCount( selectBody.size() );  //让次表行头跟着ơ表行数变化
      }
    };
    selectTable.setModel( selectModel );

    prepareRowHeaderModel.setRowCount( prepareBody.size() );
    selectRowHeaderModel.setRowCount( selectBody.size() );
  }

 

  /**
   *
   * 取消所有选择的h?br />   *
   */
  private final void deselectAll()
  {
    for( int i=0; i<selectBody.size(); i++ )
       {
         ( (Object[])selectBody.get( i ) )[0]=Boolean.FALSE;  //所有选择的行的第一列设为false
       }

    selectBody.clear();  //删除已经选择的内?/font>

    prepareModel.fireTableDataChanged();  //通告主表l构变化
    selectModel.fireTableDataChanged();   //通告ơ表l构变化

    selectRowHeaderModel.setRowCount( selectBody.size() );  //让次表行头跟着ơ表行数变化
  }

 

  /**
   *
   * 关闭E序
   *
   *
   */
  private void closeApplication()
  {
    Toolkit.getDefaultToolkit().beep();

    int answer=JOptionPane.showConfirmDialog( TableChooser.this, "您真的要退出此pȝQ?, "退出程?, JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null );

    if( answer==JOptionPane.YES_OPTION )  //选择“是?br />      {
        System.exit( 0 );
      }
    else if( answer==JOptionPane.NO_OPTION )  //选择“否?br />           {
             return;
           }
  }


  /**
   *
   * 入口ȝ?br />   *
   */
//*/////////////////////////////////////////////////////////////////////////////
  public static void main( String args[] )
  {
    //改变GUI字体
    Font font=new Font( "宋体", Font.PLAIN, 12 );
    Enumeration keys=UIManager.getLookAndFeelDefaults().keys();
    while( keys.hasMoreElements() )
         {
           Object key=keys.nextElement();

           if( UIManager.get( key ) instanceof Font )
             {
               UIManager.put( key, font );
             }
         }

    //改变ComboBox背景?br />    UIManager.put( "ComboBox.foreground", Color.black );
    UIManager.put( "ComboBox.background", Color.white );
    UIManager.put( "ComboBox.disabledForeground", Color.gray );
    UIManager.put( "ComboBox.disabledBackground", Color.white );

    UIManager.put( "Viewport.background", Color.white );

    //new TableChooser( true ).setVisible( true );
    new TableChooser( false ).setVisible( true );
  }
//*/////////////////////////////////////////////////////////////////////////////
}

 

 

/***********************************************************
 *
 * 待选、已选表D头用的渲染器Renderer
 *
 **********************************************************/
class RowHeaderRenderer extends JLabel implements TableCellRenderer
{
  private JTable refTable;
  private JTableHeader header;

  private Color headerForeground;
  private Color headerBackground;
  private Font headerFont;

  public RowHeaderRenderer( JTable refTable )
  {
    this.refTable=refTable;
    this.header=refTable.getTableHeader();

    this.headerForeground=header.getForeground();
    this.headerBackground=header.getBackground();
    this.headerFont=header.getFont();
  }

  public Component getTableCellRendererComponent( JTable table,
                                                  Object obj,
                                                  boolean isSelected,
                                                  boolean hasFocus,
                                                  int row,
                                                  int col )
  {
    this.setOpaque( true );

    //设ؓTableHeader的边框类?br />    this.setBorder( UIManager.getBorder( "TableHeader.cellBorder" ) );

    //居中昄文字
    this.setHorizontalAlignment( CENTER );

    //讄背景色ؓTableHeader的背景色
    this.setBackground( headerBackground );

    if( isSelected )
      {
        //当选取单元格时,在row header上设|成选取颜色
        this.setForeground( Color.white );
        this.setBackground( UIManager.getColor( "ScrollBar.thumbShadow" ) );
        this.setFont( headerFont );
        this.setText( String.valueOf( row+1 )+"*" );    //昄行数
      }
    else{ this.setForeground( headerForeground );
          this.setFont( headerFont );
          this.setText( String.valueOf( row+1 ) );    //昄行数
        }

    return this;
  }
}

 

 

/***********************************************************
 *
 * 待选、已选表D头用的Model
 *
 **********************************************************/
class RowHeaderModel extends DefaultTableModel
{
  RowHeaderModel( int row, int col )
  {
    super( row, col );
  }

  public boolean isCellEditable( int row, int col )
  {
    return false;  //整个行头不给~辑
  }
}

 

 

/***********************************************************
 *
 * 待选、已选表格左上角Corner
 *
 **********************************************************/
class RowHeaderCorner extends JLabel
{
  private JTable table;

  RowHeaderCorner( JTable table, String title )
  {
    super( title, JLabel.CENTER );

    this.table=table;

    this.addMouseListener( new MouseAdapter()
    {
      public void mousePressed( MouseEvent e )
      {
        tableSelectAll();
      }
    } );

    this.setBorder( UIManager.getBorder( "TableHeader.cellBorder" ) );
  }

  private void tableSelectAll()
  {
    table.selectAll();
  }
}

 

 

/***********************************************************
 *
 * 待选、已选表格用的渲染器Renderer
 *
 **********************************************************/
class ShowTableRenderer extends DefaultTableCellRenderer
{
  public Component getTableCellRendererComponent( JTable table,
                                                  Object obj,
                                                  boolean isSelected,
                                                  boolean hasFocus,
                                                  int row,
                                                  int col )
  {
    super.getTableCellRendererComponent( table,
                                         obj,
                                         isSelected,
                                         hasFocus,
                                         row,
                                         col );

    this.setHorizontalAlignment( JLabel.CENTER );  //居中昄文字

    return this;
  }
}

 

 

/***********************************************************
 *
 * 待选、已选表格用的Model
 *
 **********************************************************/
class ShowTableModel extends AbstractTableModel
{
  private ArrayList tableBody;
  private String[] tableTitle;

  ShowTableModel( ArrayList body, String[] title )
  {
    this.tableBody  = body;
    this.tableTitle = title;
  }

  public Object getValueAt( int row, int col )
  {
    if( row>=0&&row<tableBody.size()&&col>=0&&col<tableTitle.length )  //控制很严
      {
        return ( (Object[])tableBody.get( row ) )[col];
      }
    else{ return null;
        }
  }

  public void setValueAt( Object value, int row, int col )
  {
    ( (Object[])tableBody.get( row ) )[col]=value;
  }

  public int getColumnCount()
  {
    return tableTitle.length;
  }

  public String getColumnName( int col )
  {
    if( col>=0&&col<tableTitle.length )
      {
        return tableTitle[col];
      }
    else{ return "";
        }
  }

  public Class getColumnClass( int col )
  {
    if( col==0 )  //W一列ؓ选择?br />      {
        return Boolean.class;
      }

    return Object.class;
  }

  public int getRowCount()
  {
    return tableBody.size();
  }

  public boolean isCellEditable( int row, int col )
  {
    return ( col==0 );  //如果是第一列给~辑Q其他不l?br />  }
}



NeedJava 2007-07-08 22:03 发表评论
]]>
〔Java〕关于JTable的Rendererhttp://www.aygfsteel.com/needjava/archive/2007/07/03/127722.htmlNeedJavaNeedJavaMon, 02 Jul 2007 20:14:00 GMThttp://www.aygfsteel.com/needjava/archive/2007/07/03/127722.htmlhttp://www.aygfsteel.com/needjava/comments/127722.htmlhttp://www.aygfsteel.com/needjava/archive/2007/07/03/127722.html#Feedback0http://www.aygfsteel.com/needjava/comments/commentRss/127722.htmlhttp://www.aygfsteel.com/needjava/services/trackbacks/127722.htmlimport java.awt.Component;

import javax.swing.JFrame;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.JScrollPane;
import javax.swing.DefaultCellEditor;

import javax.swing.event.ChangeEvent;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;

import javax.swing.table.TableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;


public class WhoFirstTest
{
  public static void main( String[]args )
  {
    final Object[][] data=new Object[][]{ { "11", new Integer( 1 ) }, { "22", new Integer( 2 ) } };

    final String[] header=new String[]{ "表头1", "表头2" };

    Table table=new Table( new BaseModel( data, header ) );

    JTextField editor=new JTextField();
    editor.setBorder( null );
    table.setDefaultEditor( Object.class, new BaseEditor( editor ) );

    table.setDefaultRenderer( Object.class, new BaseRenderer() );

    table.getModel().addTableModelListener( new TableModelListener()
    {
      public void tableChanged( TableModelEvent e )
      {
        System.out.println( "tableChanged called" );
        /*/
        System.out.println( "FirstRow="+e.getFirstRow() );
        System.out.println( "LastRow="+e.getLastRow() );
        System.out.println( "Column="+e.getColumn() );
        System.out.println( "Type="+( ( e.getType()==TableModelEvent.INSERT ) ? "Insert" : ( e.getType()==TableModelEvent.UPDATE ) ? "Update" : ( e.getType()==TableModelEvent.DELETE ) ? "Delete" : "Unknow" ) );
        /*/
        //Do CRUD for DB ...
        //*/
      }
    } );

    JFrame frame=new JFrame( "看看l单元格赋值的序" );
    frame.setContentPane( new JScrollPane( table ) );
    frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    frame.pack();
    frame.setVisible( true );
  }
}


class Table extends JTable
{
  public Table( TableModel model )
  {
    super( model );
  }

  public void editingStopped( ChangeEvent e )
  {
    System.out.println( "editingStopped called" );
    super.editingStopped( e );
  }

  public Component prepareRenderer( TableCellRenderer renderer, int row, int column )
  {
    System.out.println( "prepareRenderer called" );
    return super.prepareRenderer( renderer, row, column );
  }
}


class BaseModel extends AbstractTableModel
{
  Object[][] data = null;
  Object[] header = null;

  public BaseModel( Object[][] data, Object[] header )
  {
    this.data   = data;
    this.header = header;
  }

  public String getColumnName( int column )
  {
    return header[column].toString();
  }

  public int getRowCount()
  {
    return data.length;
  }

  public int getColumnCount()
  {
    return header.length;
  }

  public Object getValueAt( int row, int col )
  {
    return data[row][col];
  }

  public boolean isCellEditable( int row, int column )
  {
    return true;
  }

  public void setValueAt( Object value, int row, int col )
  {
    System.out.println( "setValueAt called" );
    data[row][col]=value;
    fireTableCellUpdated( row, col );
  }

  public void fireTableCellUpdated( int row, int column )
  {
    super.fireTableCellUpdated( row, column );
    System.out.println( "fireTableCellUpdated called" );
  }

  public void fireTableChanged( TableModelEvent e )
  {
    super.fireTableChanged( e );
    System.out.println( "fireTableChanged called" );
  }
}


class BaseRenderer extends DefaultTableCellRenderer
{
  public BaseRenderer()
  {
    super();
  }

  public Component getTableCellRendererComponent( JTable table,
                                                  Object value,
                                                  boolean isSelected,
                                                  boolean hasFocus,
                                                  int row,
                                                  int column )
  {
    System.out.println( "BaseRenderer called" );

    setText( ( value==null ) ? "" : value.toString() );

    return this;
  }
}


class BaseEditor extends DefaultCellEditor
{
  public BaseEditor( JTextField editor )
  {
    super( editor );
  }

  public boolean stopCellEditing()
  {
    System.out.println( "stopCellEditing called" );

    String value=(String)getCellEditorValue();

    try{ Integer.parseInt( value );
       }
    catch( NumberFormatException e )
         {
           this.editorComponent.requestFocus();
           return false;
         }

    return super.stopCellEditing();
  }
}



NeedJava 2007-07-03 04:14 发表评论
]]>
〔SQL〕〔Java〕MS SQL Server Typehttp://www.aygfsteel.com/needjava/archive/2007/07/03/127720.htmlNeedJavaNeedJavaMon, 02 Jul 2007 20:03:00 GMThttp://www.aygfsteel.com/needjava/archive/2007/07/03/127720.htmlhttp://www.aygfsteel.com/needjava/comments/127720.htmlhttp://www.aygfsteel.com/needjava/archive/2007/07/03/127720.html#Feedback0http://www.aygfsteel.com/needjava/comments/commentRss/127720.htmlhttp://www.aygfsteel.com/needjava/services/trackbacks/127720.html import java.io.FileWriter;
import java.io.IOException;
import java.io.BufferedWriter;

import java.awt.Toolkit;

import java.sql.Types;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.DriverManager;
import java.sql.ResultSetMetaData;

import javax.swing.JOptionPane;


final class GetSQLServerType
{
  private Connection        connection;
  private Statement         statement;
  private ResultSet         resultSet;
  private ResultSetMetaData metaData;

  public GetSQLServerType()
  {
    try{ //实例化MSSQL2000的驱?br />         Class.forName( "com.microsoft.jdbc.sqlserver.SQLServerDriver" );

         //q接数据?br />         connection=DriverManager.getConnection( "jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=Northwind", "sa", "" );

         //创徏Statement接口对象
         statement=connection.createStatement();

         resultSet=statement.executeQuery( " SELECT * FROM SQLServerType " );

         metaData=resultSet.getMetaData();

         int columnCount=metaData.getColumnCount();

         FileWriter fw=new FileWriter( "SQLServerType.htm" );
         BufferedWriter bfw=new BufferedWriter( fw );

         bfw.write( "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=GBK\">" ); bfw.newLine();
         bfw.write( "<title>SQL Server数据cd对应Javacd</title>" ); bfw.newLine();

         //x样式?/////////////////////////////////////////
         bfw.write( "<style type=text/css>" ); bfw.newLine();
         bfw.write( "td{ color:          #000000;" ); bfw.newLine();
         bfw.write( "    background:     #FFFFFF;" ); bfw.newLine();
         bfw.write( "    height:         20px;" ); bfw.newLine();
         bfw.write( "    font-size:      10pt;" ); bfw.newLine();
         bfw.write( "    font-weight:    normal;" ); bfw.newLine();
         bfw.write( "    font-family:    宋体;" ); bfw.newLine();
         bfw.write( "    text-align:     right;" ); bfw.newLine();
         bfw.write( "    vertical-align: middle;" ); bfw.newLine();
         bfw.write( "    table-layout:   fixed;" ); bfw.newLine();
         bfw.write( "    padding-top:    2;" ); bfw.newLine();
         bfw.write( "    padding-bottom: 2;" ); bfw.newLine();
         bfw.write( "    padding-left:   2;" ); bfw.newLine();
         bfw.write( "    padding-right:  2;" ); bfw.newLine();
         bfw.write( "  }" ); bfw.newLine();
         bfw.write( "td.left{ text-align: left; }" ); bfw.newLine();
         bfw.write( "td.center{ text-align: center; }" ); bfw.newLine();
         bfw.write( "</style>" ); bfw.newLine();

         bfw.write( "<body>" ); bfw.newLine();
         bfw.write( "<table border=1 bordercolor=#000000 cellspacing=0 style=\"border-collapse:collapse\">" );bfw.newLine();
         bfw.write( "  <tr>" );bfw.newLine();
         bfw.write( "    <td noWrap class=center>metaData.getColumnClassName( column )</td>" );bfw.newLine();
         bfw.write( "    <td noWrap class=center>metaData.getColumnLabel( column )</td>" );bfw.newLine();
         bfw.write( "    <td noWrap class=center>metaData.getCatalogName( column )</td>" );bfw.newLine();
         bfw.write( "    <td noWrap class=center>metaData.getColumnCount()</td>" );bfw.newLine();
         bfw.write( "    <td noWrap class=center>metaData.getColumnDisplaySize( column )</td>" );bfw.newLine();
         bfw.write( "    <td noWrap class=center>metaData.getColumnName( column )</td>" );bfw.newLine();
         bfw.write( "    <td noWrap class=center>metaData.getColumnType( column )</td>" );bfw.newLine();
         bfw.write( "    <td noWrap class=center>metaData.getColumnTypeName( column )</td>" );bfw.newLine();
         bfw.write( "    <td noWrap class=center>metaData.getPrecision( column )</td>" );bfw.newLine();
         bfw.write( "    <td noWrap class=center>metaData.getScale( column )</td>" );bfw.newLine();
         bfw.write( "    <td noWrap class=center>metaData.getSchemaName( column )</td>" );bfw.newLine();
         bfw.write( "    <td noWrap class=center>metaData.getTableName( column )</td>" );bfw.newLine();
         bfw.write( "    <td noWrap class=center>metaData.isAutoIncrement( column )</td>" );bfw.newLine();
         bfw.write( "    <td noWrap class=center>metaData.isCaseSensitive( column )</td>" );bfw.newLine();
         bfw.write( "    <td noWrap class=center>metaData.isCurrency( column )</td>" );bfw.newLine();
         bfw.write( "    <td noWrap class=center>metaData.isDefinitelyWritable( column )</td>" );bfw.newLine();
         bfw.write( "    <td noWrap class=center>metaData.isNullable( column )</td>" );bfw.newLine();
         bfw.write( "    <td noWrap class=center>metaData.isReadOnly( column )</td>" );bfw.newLine();
         bfw.write( "    <td noWrap class=center>metaData.isSearchable( column )</td>" );bfw.newLine();
         bfw.write( "    <td noWrap class=center>metaData.isSigned( column )</td>" );bfw.newLine();
         bfw.write( "    <td noWrap class=center>metaData.isWritable( column )</td>" );bfw.newLine();
         bfw.write( "  </tr>" );bfw.newLine();

         for( int column=0; column<columnCount; column++ )
            {
              /*/
              //metaData的所有方?br />              bfw.write( "metaData.getColumnCount() "                         + metaData.getColumnCount() );bfw.newLine();
              bfw.write( "metaData.isAutoIncrement( "+( column+1 )+" ) "      + metaData.isAutoIncrement( ( column+1 ) ) );bfw.newLine();
              bfw.write( "metaData.isCaseSensitive( "+( column+1 )+" ) "      + metaData.isCaseSensitive( ( column+1 ) ) );bfw.newLine();
              bfw.write( "metaData.isSearchable( "+( column+1 )+" ) "         + metaData.isSearchable( ( column+1 ) ) );bfw.newLine();
              bfw.write( "metaData.isCurrency( "+( column+1 )+" ) "           + metaData.isCurrency( ( column+1 ) ) );bfw.newLine();
              bfw.write( "metaData.isNullable( "+( column+1 )+" ) "           + metaData.isNullable( ( column+1 ) ) );bfw.newLine();
              bfw.write( "metaData.isSigned( "+( column+1 )+" ) "             + metaData.isSigned( ( column+1 ) ) );bfw.newLine();
              bfw.write( "metaData.getColumnDisplaySize( "+( column+1 )+" ) " + metaData.getColumnDisplaySize( ( column+1 ) ) );bfw.newLine();
              bfw.write( "metaData.getColumnLabel( "+( column+1 )+" ) "       + metaData.getColumnLabel( ( column+1 ) ) );bfw.newLine();
              bfw.write( "metaData.getColumnName( "+( column+1 )+" ) "        + metaData.getColumnName( ( column+1 ) ) );bfw.newLine();
              bfw.write( "metaData.getSchemaName( "+( column+1 )+" ) "        + metaData.getSchemaName( ( column+1 ) ) );bfw.newLine();
              bfw.write( "metaData.getPrecision( "+( column+1 )+" ) "         + metaData.getPrecision( ( column+1 ) ) );bfw.newLine();
              bfw.write( "metaData.getScale( "+( column+1 )+" ) "             + metaData.getScale( ( column+1 ) ) );bfw.newLine();
              bfw.write( "metaData.getTableName( "+( column+1 )+" ) "         + metaData.getTableName( ( column+1 ) ) );bfw.newLine();
              bfw.write( "metaData.getCatalogName( "+( column+1 )+" ) "       + metaData.getCatalogName( ( column+1 ) ) );bfw.newLine();
              bfw.write( "metaData.getColumnType( "+( column+1 )+" ) "        + metaData.getColumnType( ( column+1 ) ) );bfw.newLine();
              bfw.write( "metaData.getColumnTypeName( "+( column+1 )+" ) "    + metaData.getColumnTypeName( ( column+1 ) ) );bfw.newLine();
              bfw.write( "metaData.isReadOnly( "+( column+1 )+" ) "           + metaData.isReadOnly( ( column+1 ) ) );bfw.newLine();
              bfw.write( "metaData.isWritable( "+( column+1 )+" ) "           + metaData.isWritable( ( column+1 ) ) );bfw.newLine();
              bfw.write( "metaData.isDefinitelyWritable( "+( column+1 )+" ) " + metaData.isDefinitelyWritable( ( column+1 ) ) );bfw.newLine();
              bfw.write( "metaData.getColumnClassName( "+( column+1 )+" ) "   + metaData.getColumnClassName( ( column+1 ) ) );bfw.newLine();
              bfw.write( "metaData.isSigned( "+( column+1 )+" ) "             + metaData.isSigned( ( column+1 ) ) );bfw.newLine();
              bfw.write( "--------------------------------------------------------------------------------" );bfw.newLine();
              //*/

              bfw.write( "  <tr>" );bfw.newLine();
              bfw.write( "    <td noWrap class=center>"+metaData.getColumnClassName( column+1 )   +"</td>" );bfw.newLine();
              bfw.write( "    <td noWrap class=center>"+metaData.getColumnLabel( column+1 )       +"</td>" );bfw.newLine();
              bfw.write( "    <td noWrap class=center>"+metaData.getCatalogName( column+1 )       +"</td>" );bfw.newLine();
              bfw.write( "    <td noWrap class=center>"+metaData.getColumnCount()                 +"</td>" );bfw.newLine();
              bfw.write( "    <td noWrap class=center>"+metaData.getColumnDisplaySize( column+1 ) +"</td>" );bfw.newLine();
              bfw.write( "    <td noWrap class=center>"+metaData.getColumnName( column+1 )        +"</td>" );bfw.newLine();
              bfw.write( "    <td noWrap class=center>"+metaData.getColumnType( column+1 )        +"</td>" );bfw.newLine();
              bfw.write( "    <td noWrap class=center>"+metaData.getColumnTypeName( column+1 )    +"</td>" );bfw.newLine();
              bfw.write( "    <td noWrap class=center>"+metaData.getPrecision( column+1 )         +"</td>" );bfw.newLine();
              bfw.write( "    <td noWrap class=center>"+metaData.getScale( column+1 )             +"</td>" );bfw.newLine();
              bfw.write( "    <td noWrap class=center>"+metaData.getSchemaName( column+1 )        +"</td>" );bfw.newLine();
              bfw.write( "    <td noWrap class=center>"+metaData.getTableName( column+1 )         +"</td>" );bfw.newLine();
              bfw.write( "    <td noWrap class=center>"+metaData.isAutoIncrement( column+1 )      +"</td>" );bfw.newLine();
              bfw.write( "    <td noWrap class=center>"+metaData.isCaseSensitive( column+1 )      +"</td>" );bfw.newLine();
              bfw.write( "    <td noWrap class=center>"+metaData.isCurrency( column+1 )           +"</td>" );bfw.newLine();
              bfw.write( "    <td noWrap class=center>"+metaData.isDefinitelyWritable( column+1 ) +"</td>" );bfw.newLine();
              bfw.write( "    <td noWrap class=center>"+metaData.isNullable( column+1 )           +"</td>" );bfw.newLine();
              bfw.write( "    <td noWrap class=center>"+metaData.isReadOnly( column+1 )           +"</td>" );bfw.newLine();
              bfw.write( "    <td noWrap class=center>"+metaData.isSearchable( column+1 )         +"</td>" );bfw.newLine();
              bfw.write( "    <td noWrap class=center>"+metaData.isSigned( column+1 )             +"</td>" );bfw.newLine();
              bfw.write( "    <td noWrap class=center>"+metaData.isWritable( column+1 )           +"</td>" );bfw.newLine();
              bfw.write( "  </tr>" );bfw.newLine();
            }

         bfw.write( "</table>" );bfw.newLine();
         bfw.write( "</body>" ); bfw.newLine();

         bfw.flush();
         fw.close();
       }
    catch( IOException ioe )
         {
           Toolkit.getDefaultToolkit().beep();
           JOptionPane.showMessageDialog( null, "创徏文gp|Q?, "创徏文g错误", JOptionPane.WARNING_MESSAGE );
           System.out.println( ioe );
         }
    catch( ClassNotFoundException cnfe )
         {
           Toolkit.getDefaultToolkit().beep();
           JOptionPane.showMessageDialog( null, "找不到数据库驱动文gQ?, "数据库错?, JOptionPane.WARNING_MESSAGE );
           System.out.println( cnfe );
         }
    catch( SQLException se )
         {
           Toolkit.getDefaultToolkit().beep();
           JOptionPane.showMessageDialog( null, "q接数据库失败!h查数据库是否q行?, "数据库错?, JOptionPane.WARNING_MESSAGE );
           System.out.println( se );
         }
    finally{ try{ if( resultSet!=null )
                    {
                      resultSet.close();  //关闭ResultSet接口实例
                    }

                  if( statement!=null )
                    {
                      statement.close();  //关闭Statement接口实例
                    }

                  if( connection!=null )
                    {
                      connection.close();  //关闭Connection接口实例
                    }
                }
             catch( SQLException se )
                  {
                    System.out.println( se );
                  }
           }
  }

  public static void main( String[] arg )
  {
    GetSQLServerType g=new GetSQLServerType();
  }
}



NeedJava 2007-07-03 04:03 发表评论
]]>
〔Java〕得到网上邻?/title><link>http://www.aygfsteel.com/needjava/archive/2006/09/15/69803.html</link><dc:creator>NeedJava</dc:creator><author>NeedJava</author><pubDate>Fri, 15 Sep 2006 08:07:00 GMT</pubDate><guid>http://www.aygfsteel.com/needjava/archive/2006/09/15/69803.html</guid><wfw:comment>http://www.aygfsteel.com/needjava/comments/69803.html</wfw:comment><comments>http://www.aygfsteel.com/needjava/archive/2006/09/15/69803.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/needjava/comments/commentRss/69803.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/needjava/services/trackbacks/69803.html</trackback:ping><description><![CDATA[ <p> <font face="Courier New" color="#808080" size="2">import java.io.IOException;<br />import java.io.BufferedReader;<br />import java.io.InputStreamReader;</font> </p> <p> <font face="Courier New" color="#808080" size="2">/*******************************************************************************<br /> *<br /> * 使用 net view /domain 得到工作l列?br /> *<br /> * 使用 net view /domain:workgroup 得到指定工作l的机器列表<br /> *<br /> * Author: NeedJava<br /> *<br /> * Modified: 2006.09.11<br /> *<br /> * Version: 1.0<br /> *<br /> ******************************************************************************/<br />public class Neighborhood<br />{<br />  private static String getNeighborhood( String command, String domain )<br />  {<br />    String line="";</font> </p> <p> <font face="Courier New" color="#808080" size="2">    boolean begin=false;</font> </p> <p> <font face="Courier New" color="#808080" size="2">    StringBuffer sb=new StringBuffer();</font> </p> <p> <font face="Courier New" color="#808080" size="2">    try{ Process process=Runtime.getRuntime().exec( command );</font> </p> <p> <font face="Courier New" color="#808080" size="2">         BufferedReader br=new BufferedReader( new InputStreamReader( process.getInputStream() ) );</font> </p> <p> <font face="Courier New" color="#808080" size="2">         while( ( line=br.readLine() )!=null )<br />              {<br />                line=line.trim();</font> </p> <p> <font face="Courier New" color="#808080" size="2">                //你的工作l千万不要命名ؓ“命令成功完成。”或者是“The command completed successfully.?br />                if( line.endsWith( "命o成功完成? )||line.equalsIgnoreCase( "The command completed successfully." ) )<br />                  {<br />                    begin=false;</font> </p> <p> <font face="Courier New" color="#808080" size="2">                    break;<br />                  }</font> </p> <p> <font face="Courier New" color="#808080" size="2">                if( begin )<br />                  {<br />                    if( domain.length()>0 )<br />                      {<br />                        sb.append( "  " ).append( line ).append( "\r\n" );</font> </p> <p> <font face="Courier New" color="#808080" size="2">                        //System.out.println( "得到   "+line );<br />                      }<br />                    else{ sb.append( line ).append( "\r\n" );</font> </p> <p> <font face="Courier New" color="#808080" size="2">                          //System.out.println( "得到 "+line );</font> </p> <p> <font face="Courier New" color="#808080" size="2">                          sb.append( getNeighborhood( "net view /domain:"+line, line ) );<br />                        }<br />                  }</font> </p> <p> <font face="Courier New" color="#808080" size="2">                if( line.endsWith( "-" ) )<br />                  {<br />                    begin=true;<br />                  }<br />              }</font> </p> <p> <font face="Courier New" color="#808080" size="2">         br.close();</font> </p> <p> <font face="Courier New" color="#808080" size="2">         process.waitFor();<br />       }<br />    catch( IOException ioe )<br />         {<br />           System.out.println( ioe );<br />         }<br />    catch( Exception e )<br />         {<br />           System.out.println( e );<br />         }</font> </p> <p> <font face="Courier New" color="#808080" size="2">    return sb.toString();<br />  }</font> </p> <p> <br /> <font face="Courier New" color="#808080" size="2">  public static void main( String[] args )<br />  {<br />    System.out.println( Neighborhood.getNeighborhood( "net view /domain", "" ) );<br />  }<br />}</font> </p> <img src ="http://www.aygfsteel.com/needjava/aggbug/69803.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/needjava/" target="_blank">NeedJava</a> 2006-09-15 16:07 <a href="http://www.aygfsteel.com/needjava/archive/2006/09/15/69803.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƺ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ʡ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ﶫ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">ʱ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">۷</a>| <a href="http://" target="_blank">Т</a>| <a href="http://" target="_blank">¡</a>| <a href="http://" target="_blank">Ϻ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ũ</a>| <a href="http://" target="_blank">̨</a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank">Ӣɳ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">«Ϫ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ǭ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank">Ȫ</a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank">ʤ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>