春風博客

          春天里,百花香...

          導航

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          統計

          公告

          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 閱讀(499) | 評論 (0)編輯 收藏

          逛技術論壇有嘛用?

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

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

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

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

          posted @ 2007-06-14 07:07 sitinspring 閱讀(805) | 評論 (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 閱讀(8157) | 評論 (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 閱讀(1944) | 評論 (0)編輯 收藏

          自己模擬一個Spring的IoC處理

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

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

          2.Spring之Ioc實現

          這里就不贅述了,詳情請見帖子
          http://www.aygfsteel.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 閱讀(529) | 評論 (1)編輯 收藏

          僅列出標題
          共13頁: First 上一頁 5 6 7 8 9 10 11 12 13 
          sitinspring(http://www.aygfsteel.com)原創,轉載請注明出處.
          主站蜘蛛池模板: 临颍县| 平定县| 岢岚县| 临潭县| 武清区| 景洪市| 尼勒克县| 江城| 平凉市| 古田县| 安溪县| 曲麻莱县| 福安市| 淮安市| 吉安市| 漯河市| 呼玛县| 望奎县| 满城县| 迭部县| 上林县| 平利县| 胶州市| 新巴尔虎左旗| 昭苏县| 廉江市| 定远县| 合作市| 万年县| 德令哈市| 昭通市| 丽水市| 广汉市| 西贡区| 松江区| 海安县| 巴彦县| 蓬莱市| 德州市| 衢州市| 砀山县|