春天里,百花香...
			
			
				
					
			  
	#
	
		
			
			
			书分专业书与闲书.专业书是安身立命之本,建功立业之基,只要对自己有益的,在经济能力能承受的基础上应该多买多看.闲书基本只起业余调剂作用,可看可不看,切勿拿小菜当正餐,过分阅读只有迷惑心智,分散精力的后果.切不可沉迷于其中,所谓玩物丧志是也.
无论钱多寡,买书都应该精挑细选,确实是好书才买,买了坏书或一般书除了浪费钱财,耽误时间,还丧失了读好书的时间和机会,要知道在现在烦杂的社会生活中偷得浮生半日闲也是不容易的,何况以后看见还添堵,与其如此还不如锻炼出鉴别良莠的眼光.
专业书分精品与平装.精品是指那种老外写的,大部头的,全面详细的书,这种书虽贵,但读来收益很大,有微言大义,能常读常新,不像那些国内翻译,改写的,只抄个皮毛,买来如同鸡肋,还不如不买.
看书一定要动笔记点写点什么,所谓"不动笔墨不读书",道理说不上来,但确实有效,写在笔记本或博客都行.闲书可写读后感,锻炼以下文笔也不错.当然看书能把所读熟记于心最好,不要依赖笔记.依赖笔记会养成怠惰的习惯,真要用时一不能立即提出对策,二不一定能找到笔记在那干着急.笔记是用来总结回味的,不是随用随查的电子书籍.
书只能教你知识,不要期待书本或者人能指明你现在该自己干什么,他们只能大致指出一个方向,道还要靠自己去追寻.
			
			
		 
	
		
			
			
			     摘要: 1.论坛和电视非常相象.
2.论坛的最大作用是开阔眼界,但开阔的程度取决于你自己.它犹如一个垃圾堆,找到件宝贝需要花费大量时间.
3.论坛的积分,精华,良好数都是虚幻的,应当视如草芥.
4.最好只在无聊时需要消遣时逛逛论坛,这样你花的时间和逛论坛所得在价值上才对等.
5.拿你自己的时间生命投资现实比投资虚幻要来得实在.  
阅读全文
			
			
		 
	
		
			
			
			     摘要: 1.急于出名赚钱的想法.
2.从众的想法.
3.破罐子破摔的想法.
4.早有蜻蜓立上头的想法.  
阅读全文
			
			
		 
	
		
			
			
			本人在做一个在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.实现的效果如下:

			
			
		 
	
		
			
			
			 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  
 
			
			
		 
	
		
			
			
			看spring的ioc,感觉很点意思,于是自己写了一个Spring之FileSystemXmlApplicationContext的模拟类,贴出来请大家斧正.
1.功能说明:关于订单,折扣,价格
订单是货物的订单,主要货物有计算机,文具,纸张三类,还有其它一些物件.每种货物都有不同的折扣比例,从单价中扣除折扣比例后就是进货时的真实价格.
2.Spring之Ioc实现
这里就不赘述了,详情请见帖子
http://www.blogjava.net/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   
感悟:自己做过一遍后,觉得很多框架并非想像中那样神秘高深,只要肯动脑筋,愿意动手,我们有机会站在时代的风口浪尖上,: ).
 
			
			
		 
	
				
			 
			
sitinspring(http://www.blogjava.net)原创,转载请注明出处.