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

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

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

    春風博客

    春天里,百花香...

    導航

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    統計

    公告

    MAIL: junglesong@gmail.com
    MSN: junglesong_5@hotmail.com

    Locations of visitors to this page

    常用鏈接

    留言簿(11)

    隨筆分類(224)

    隨筆檔案(126)

    個人軟件下載

    我的其它博客

    我的鄰居們

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    #

    買書與讀書

    書分專業書與閑書.專業書是安身立命之本,建功立業之基,只要對自己有益的,在經濟能力能承受的基礎上應該多買多看.閑書基本只起業余調劑作用,可看可不看,切勿拿小菜當正餐,過分閱讀只有迷惑心智,分散精力的后果.切不可沉迷于其中,所謂玩物喪志是也.

    無論錢多寡,買書都應該精挑細選,確實是好書才買,買了壞書或一般書除了浪費錢財,耽誤時間,還喪失了讀好書的時間和機會,要知道在現在煩雜的社會生活中偷得浮生半日閑也是不容易的,何況以后看見還添堵,與其如此還不如鍛煉出鑒別良莠的眼光.

    專業書分精品與平裝.精品是指那種老外寫的,大部頭的,全面詳細的書,這種書雖貴,但讀來收益很大,有微言大義,能常讀常新,不像那些國內翻譯,改寫的,只抄個皮毛,買來如同雞肋,還不如不買.

    看書一定要動筆記點寫點什么,所謂"不動筆墨不讀書",道理說不上來,但確實有效,寫在筆記本或博客都行.閑書可寫讀后感,鍛煉以下文筆也不錯.當然看書能把所讀熟記于心最好,不要依賴筆記.依賴筆記會養成怠惰的習慣,真要用時一不能立即提出對策,二不一定能找到筆記在那干著急.筆記是用來總結回味的,不是隨用隨查的電子書籍.

    書只能教你知識,不要期待書本或者人能指明你現在該自己干什么,他們只能大致指出一個方向,道還要靠自己去追尋.

    posted @ 2007-06-17 22:46 sitinspring 閱讀(491) | 評論 (0)編輯 收藏

    逛技術論壇有嘛用?

         摘要: 1.論壇和電視非常相象.
    2.論壇的最大作用是開闊眼界,但開闊的程度取決于你自己.它猶如一個垃圾堆,找到件寶貝需要花費大量時間.
    3.論壇的積分,精華,良好數都是虛幻的,應當視如草芥.
    4.最好只在無聊時需要消遣時逛逛論壇,這樣你花的時間和逛論壇所得在價值上才對等.
    5.拿你自己的時間生命投資現實比投資虛幻要來得實在.  閱讀全文

    posted @ 2007-06-15 12:47 sitinspring 閱讀(492) | 評論 (4)編輯 收藏

    對程序員來說,幾種想法最要不得

         摘要: 1.急于出名賺錢的想法.
    2.從眾的想法.
    3.破罐子破摔的想法.
    4.早有蜻蜓立上頭的想法.  閱讀全文

    posted @ 2007-06-14 07:07 sitinspring 閱讀(792) | 評論 (6)編輯 收藏

    在JTable上點擊右鍵并彈出菜單的實現

    本人在做一個在JTable上點擊右鍵彈出菜單的程序時,遇到了這樣的問題--菜單首項需要根據點擊的表格行的"表名列"改變,這需要我們做一點小小的工作,其實就是根據點擊的位置推算所在行,好了,廢話少說,看代碼吧.

    1.表格的建立過程

        String[] headers = {  "No", "Table Name"  };
        Object[][] cellData = null;

        DefaultTableModel model = new DefaultTableModel(cellData, headers) {
          public boolean isCellEditable(int row, int column) {
            // 第N列可以編輯
            /*
             * if (column == N) { return false; }
             */

            // 整個表都不能編輯
            return false;
          }
        };

        table = new JTable(model);

    2.菜單的建立
        popupMenu=new JPopupMenu();
       
        tableNameItem=new JMenuItem("");
        selectItem=new JMenuItem("Select SQL");
        insertItem=new JMenuItem("Insert SQL");
        deleteItem=new JMenuItem("Delete SQL");
        updateItem=new JMenuItem("Update SQL");
        hbmItem=new JMenuItem("hbm xml");
        hbmPojoItem=new JMenuItem("Pojo Class");
       
        popupMenu.add(tableNameItem);
        popupMenu.addSeparator();
        popupMenu.add(selectItem);
        popupMenu.add(insertItem);
        popupMenu.add(deleteItem);
        popupMenu.add(updateItem);
        popupMenu.addSeparator();
        popupMenu.add(hbmItem);
        popupMenu.add(hbmPojoItem);

    3.菜單的彈出處理
        
          table.addMouseListener(new MouseAdapter() {
              public void mousePressed(MouseEvent evt) {
                  if (evt.isPopupTrigger()) { 
                    //
    取得右鍵點擊所在行
                 
    int row=evt.getY()/table.getRowHeight();
                 
                  /**
                   * 取得是表名的那一列
                   */
                  int tableNameColumn=-1;
                 
                  for(int i=0;i<table.getColumnModel().getColumnCount();i++){
                    TableColumn selColumn = table.getColumnModel().getColumn(i);
                    String columnHeader=(String)selColumn.getHeaderValue();
                   
                    if(columnHeader.equals("Table Name")){
                      tableNameColumn=i;
                      break;
                    }
                  }
                 
                  /**
                   * 取得表名并彈出菜單
                   */
                  if(tableNameColumn!=-1){
                    /**
                     * 修改菜單首條的名稱
                     */
                    String tableName=(String)table.getValueAt(row,tableNameColumn);
                    tableNameItem.setText(tableName);
                   
                    // 彈出菜單
                    popupMenu.show(evt.getComponent(), evt.getX(), evt.getY());
                  }
                  }
              }
          }

            
    4.實現的效果如下:

    posted @ 2007-06-12 22:23 sitinspring 閱讀(8154) | 評論 (1)編輯 收藏

    封裝完畢,能顯示當前時間并改變風格的菜單類

     1 import java.awt.event.ActionEvent;
     2 import java.awt.event.ActionListener;
     3 import java.text.SimpleDateFormat;
     4 import java.util.Calendar;
     5 import javax.swing.ButtonGroup;
     6 import javax.swing.JMenu;
     7 import javax.swing.JRadioButtonMenuItem;
     8 import javax.swing.Timer;
     9 
    10 public class TimeMenu extends JMenu{
    11     private static final long serialVersionUID = 1L;    
    12     private final static int ONE_SECOND=1000;
    13     private String timeStyle="";
    14     
    15     public TimeMenu(String text){
    16         super(text);
    17         timeStyle="yyyy-MM-dd HH:mm:ss";
    18         timer.start();
    19         addSubMenuItems();
    20     }
    21 
    22     Timer timer=new Timer(ONE_SECOND,new ActionListener(){
    23         public void actionPerformed(ActionEvent evt){
    24             setCurrTimeToText();
    25         }
    26     });    
    27     
    28     private void addSubMenuItems(){
    29         String[] items=new String[]{"yyyy-MM-dd HH:mm:ss","HH:mm:ss","yyyy-MM-dd"};
    30         
    31         ButtonGroup buttongroup = new ButtonGroup();
    32         
    33         for (int i = 0; i < items.length; i++) {
    34             JRadioButtonMenuItem timeMitem = new JRadioButtonMenuItem(
    35                     items[i], i == 0);
    36             
    37             final String timeStyleTmp = items[i];
    38             timeMitem.addActionListener(new ActionListener() {
    39                 public void actionPerformed(ActionEvent e) {
    40                     try {
    41                         timeStyle=timeStyleTmp;
    42                     } catch (Exception ex) {
    43                         System.out.println("Can't Change Time Style to "
    44                                 + timeStyleTmp);
    45                     }
    46                 }
    47             });
    48             buttongroup.add(timeMitem);
    49             this.add(timeMitem);
    50         }
    51     }
    52     
    53     private void setCurrTimeToText(){
    54         this.setText(getCurrTime(timeStyle));
    55     }
    56     
    57     private String getCurrTime(String timeStyle){
    58         Calendar cal= Calendar.getInstance();
    59         SimpleDateFormat fromatter=new SimpleDateFormat(timeStyle);
    60         String strCurrTime=fromatter.format(cal.getTime());
    61         
    62         return strCurrTime;
    63     }
    64 }

    用法如下:
    1     JMenuBar menubar = new JMenuBar();
    2     mainFrame.setJMenuBar(menubar);
    3 
    4     
    5 
    6     TimeMenu timeMenu = new TimeMenu("Time");
    7     menubar.add(timeMenu);
    8 
    9 

     

    posted @ 2007-06-08 01:00 sitinspring 閱讀(1936) | 評論 (0)編輯 收藏

    自己模擬一個Spring的IoC處理

    看spring的ioc,感覺很點意思,于是自己寫了一個Spring之FileSystemXmlApplicationContext的模擬類,貼出來請大家斧正.

    1.功能說明:關于訂單,折扣,價格
    訂單是貨物的訂單,主要貨物有計算機,文具,紙張三類,還有其它一些物件.每種貨物都有不同的折扣比例,從單價中扣除折扣比例后就是進貨時的真實價格.

    2.Spring之Ioc實現

    這里就不贅述了,詳情請見帖子
    http://www.tkk7.com/sitinspring/archive/2007/06/06/122326.html

    3.模擬實現

    // 折扣接口

    public interface Discount{   
     public float getDiscount();   
     public void  setDiscount(float discount);   
    }  

    // 計算機折扣類
    public class ComputerDiscount implements Discount{   
     private float discount=0.0f;   
        
     public float getDiscount(){   
      return discount;   
     }   
        
     public void setDiscount(float discount){   
      this.discount=discount;   
     }   
    }  

    // 文具折扣類
    public class StationaryDiscount implements Discount{   
     private float discount=0.0f;   
        
     public float getDiscount(){   
      return discount;   
     }   
        
     public void setDiscount(float discount){   
      this.discount=discount;   
     }   
    }  
    // 紙張折扣類

    public class PaperDiscount implements Discount{   
     private float discount=0.0f;   
        
     public float getDiscount(){   
      return discount;   
     }   
        
     public void setDiscount(float discount){   
      this.discount=discount;   
     }   
    }  
    // 其它折扣類

    public class OtherDiscount implements Discount{   
     private float discount=0.0f;   
        
     public float getDiscount(){   
      return discount;   
     }   
        
     public void setDiscount(float discount){   
      this.discount=discount;   
     }   
    }   

    // 訂單類
    public class Order{   
     public static final String Type_Computer="Computer";   
     public static final String Type_Stationary="Stationary";   
     public static final String Type_Paper="Paper";    
     private String type;   
        
     private float price;    
        
     public Order(float price,String type){   
      this.price=price;   
      this.type=type;   
     }   
        
     public Order(){   
      this(100.0f,"Other");   
     }   
      
      
     // 調用模擬類的地方,看看調用過程和Spring很相似吧 
     public float getPrice() {   
      MockContext ctx = new MockContext("bean.xml");   
      Discount discount = null;   
      discount = (Discount) ctx.getBean(this.type);   
      
      return price * (1.0f - discount.getDiscount());   
     }   
    }   
     // Spring之FileSystemXmlApplicationContext的模擬類

    /**  
     * Spring之FileSystemXmlApplicationContext的模擬類  
     *   
     * @author junglesong  
     *  
     */  
    public class MockContext {   
     Document doc = null;// 用于解析Bean配置文件的Xml Document   
     Element root = null;// Bean文件的根節點   
      
     /**  
      * 構造函數,用于初始化doc和root  
      * @param beanFileName  
      */  
     public MockContext(String beanFileName) {   
      SAXBuilder buider = new SAXBuilder();   
      try {   
       doc = buider.build(new File(beanFileName));   
       root = doc.getRootElement();   
      
      } catch (Exception ex) {   
       ex.printStackTrace();   
      }   
     }   
      
     /**  
      * 根據beanId創建類并調用規定的方法  
      *   
      * @param beanId  
      * @return  
      */  
     public Object getBean(String beanId) {   
      Object obj=null;   
         
      try {   
       Element beanElm =getSubElm(root,"id",beanId);   
          
       if(beanElm!=null){   
        String className=beanElm.getAttribute("class").getValue();   
        Class cls=Class.forName(className);    
        // 由類得到類實例   
        obj=cls.newInstance();   
           
        List ls=beanElm.getChildren();       
        for(Iterator it=ls.iterator();it.hasNext();){   
         Element elm=(Element)it.next();   
            
         String methodName=elm.getAttributeValue("name");   
         String methodValue=(String)elm.getChildText("value");    
            
         // 取得類方法   
         Method method = cls.getMethod(getSetterMethod(methodName), new Class[] {getClassByValue(methodValue)});   
            
         // 建立數組   
                        Object params[]=getParamsByValue(methodValue);   
                                               
                        // 調用類方法   
         method.invoke(obj,params);   
        }       
       }      
      } catch (Exception ex) {   
       ex.printStackTrace();   
      }   
      
      return obj;   
     }   
        
     /**  
      * 由參數的值得到參數的類型,目前可處理浮點數和字符串兩種情況  
      *   
      * @param value  
      * @return  
      */  
     private Class getClassByValue(String value){   
      Class cls=String.class;   
         
      try{   
       Float.parseFloat(value);   
       cls=float.class;   
      }   
      catch(Exception ex){   
       ex.printStackTrace();   
      }     
         
      return cls;   
     }   
        
     /**  
      * 由參數的值得到包含參數的數組,目前可處理浮點數和字符串兩種情況  
      *   
      * @param value  
      * @return  
      */  
     private Object[] getParamsByValue(String value){   
      Object[] params=new Object[1];   
         
      try{   
       Float.parseFloat(value);   
       params[0]=new Float(Float.parseFloat(value));   
      }   
      catch(Exception ex){   
       ex.printStackTrace();   
       params[0]=new String(value);   
      }    
         
      return params;   
     }   
        
     /**  
      * 取得root下屬性為subElmAttr,值等于subElmValue的節點  
      *   
      * @param root  
      * @param subElmAttr  
      * @param subElmValue  
      * @return  
      */  
     private Element getSubElm(Element root,String subElmAttr,String subElmValue){   
      Element rtv=null;   
         
      List ls=root.getChildren();   
         
      for(Iterator it=ls.iterator();it.hasNext();){   
       Element elm=(Element)it.next();   
          
       if(elm.getAttribute(subElmAttr).getValue().equals(subElmValue)){   
        rtv=elm;   
        break;   
       }   
      }   
         
      return rtv;   
     }   
        
     /**  
      * 取得setter方法  
      *   
      * @param methodName  
      * @return  
      */  
     private String getSetterMethod(String methodName){   
      return "set"+methodName.substring(0,1).toUpperCase()+methodName.substring(1,methodName.length());   
     }   
    }   
      
     調用的代碼如下:

    java 代碼
    Order computerOrder=new Order(100.0f,Order.Type_Computer);   
    System.out.println("computerOrder's price is \t"+computerOrder.getPrice());   
      
    Order stationaryOrder=new Order(100.0f,Order.Type_Stationary);   
    System.out.println("stationaryOrder's price is \t"+stationaryOrder.getPrice());   
      
    Order paperOrder=new Order(100.0f,Order.Type_Paper);   
    System.out.println("paperOrder's price is \t\t"+paperOrder.getPrice());   
      
    Order otherOrder=new Order();   
    System.out.println("otherOrder's price is \t\t"+otherOrder.getPrice());  
    輸出效果和使用Spring是一樣的,速度慢了些,但可以優化:

    java 代碼
    computerOrder's price is  70.0  
    stationaryOrder's price is  80.0  
    paperOrder's price is   90.0  
    otherOrder's price is   95.0   

    感悟:自己做過一遍后,覺得很多框架并非想像中那樣神秘高深,只要肯動腦筋,愿意動手,我們有機會站在時代的風口浪尖上,: ).

     

    posted @ 2007-06-07 15:06 sitinspring 閱讀(526) | 評論 (1)編輯 收藏

    僅列出標題
    共13頁: First 上一頁 5 6 7 8 9 10 11 12 13 
    sitinspring(http://www.tkk7.com)原創,轉載請注明出處.
    主站蜘蛛池模板: 亚洲短视频男人的影院| 99爱在线精品视频免费观看9| 亚洲视频一区二区在线观看| 亚洲日韩精品无码专区网站| 精品国产麻豆免费网站| 亚洲一区二区三区在线视频| 色妞WWW精品免费视频| 99视频在线免费看| a级精品九九九大片免费看| 亚洲综合视频在线观看| 国产精品亚洲片在线| 亚洲一级Av无码毛片久久精品 | 亚洲午夜激情视频| 午夜视频免费观看| 国产香蕉九九久久精品免费| 1000部禁片黄的免费看| 伊人久久免费视频| 天堂在线免费观看| 99麻豆久久久国产精品免费| 在线播放国产不卡免费视频| 美女被爆羞羞网站在免费观看| 亚洲乱亚洲乱妇24p| 亚洲成a人片在线观看精品| 亚洲福利视频网址| 亚洲大片免费观看| 91嫩草亚洲精品| 亚洲一区二区免费视频| 亚洲性一级理论片在线观看| 亚洲精品福利在线观看| 亚洲成a人片在线网站| 亚洲精品午夜在线观看| 亚洲国产成人无码av在线播放 | 亚洲精品免费网站| 国产人在线成免费视频| 成年人视频在线观看免费| 在线v片免费观看视频| 国内自产拍自a免费毛片| 日韩免费电影在线观看| 又粗又大又硬又爽的免费视频| 亚洲AV无码乱码在线观看| 国产av无码专区亚洲国产精品|