2012年3月31日星期六

自定义按钮统一文件输入选择框

使用jquery在按钮的click事件中触发file的click ie下form.submit 拒绝访问
make-upload-input-enable-but-uneditable
click-event-fire-programmatically-for-a-file-input
create a "hidden" file input (using opacity, not "hidden" or "display: none"!) and afterwards create the button "bellow" it. In this way the button is seen but on user click it actually activates the file input.

<div style="display: block; width: 100px; height: 20px; overflow: hidden;">
<button style="width: 110px; height: 30px; position: relative; top: -5px; left: -5px;"><a href="javascript: void(0)">Upload File</a></button>
<input type="file" id="upload_input" name="upload" style="font-size: 50px; width: 120px; opacity: 0; filter:alpha(opacity: 0);  position: relative; top: -40px;; left: -20px" />
</div>


地球一小时,将各种背景设为黑色

chrome插件














eclipse黑色主题
插件地址



















intellij黑色主题

















notepad++新版本支持设置主题,我用的是Dark Blue

2012年3月29日星期四

interface Collection stipulations


public interface Collection<E> extends Iterable<E> { 

    /** 
返回集合中元素的数量,最大值为Integer.MAX_VALUE
     */
    int size();

    /** 
如果集合为空返回true
     */
    boolean isEmpty();

    /**
如果集合中含有该对象返回true 
     */
    boolean contains(Object o);

    /** 
返回一个遍历集合中所有元素的迭代器,不保证顺序
用Iterator模式实现遍历集合
for(int i=0; i<array.size(); i++) {// TODO: array.get(i) ...}
客户端都必须事先知道集合的内部结构,访问代码和集合本身是紧耦合,无法将访问逻辑从集合类和客户端代码中分离出来,每一种集合对应一种遍历方法,客户端代码无法复用
更恐怖的是,如果以后需要把ArrayList更换为LinkedList,则原来的客户端代码必须全部重写。
为解决以上问题,Iterator模式总是用同一种逻辑来遍历集合:
for(Iterator it = c.iterater(); it.hasNext(); ) { ... }
奥秘在于客户端自身不维护遍历集合的”指针”,所有的内部状态(如当前元素位置,是否有下一个元素)都由Iterator来维护,而这个Iterator由集合类通过工厂方法生成,因此,它知道如何遍历整个集合。
客户端从不直接和集合类打交道,它总是控制Iterator,向它发送”向后”,”取当前元素”的命令,就可以间接遍历整个集合。
JDK1.5中,还对上面的代码在语法上作了简化:
for(Type t : c) {
// 对t的操作...
}
     */
    Iterator<E> iterator();

    /** 
该方法是集合转换成对象数组的桥梁,返回的数组不再引用该集合,调用方可以修改,返回的顺序与集合迭代器顺序一致
     */
    Object[] toArray();

    /** 
     * @throws ArrayStoreException 如果运行时a的类型不是等于或是集合中元素的超类
     * @throws NullPointerException a==null
返回的Object[]仍然是把集合的所有元素变成的数组,但是类型和参数a的类型是相同的,比如执行:String[] a = new String[0];String[] y = x.toArray(a);其次,如果参数a的大小装不下集合的所有元素,返回的将是一个新的数组。如果参数a的大小能装下集合的所有元素,则返回的还是a,但a的内容用集合的元素来填充。尤其要注意的是,如果a的大小比集合元素的个数还多,a后面的部分全部被置为null
     */
    <T> T[] toArray(T[] a);


    /** 
     * @throws UnsupportedOperationException 如果未实现
     * @throws ClassCastException 若类型不符
     * @throws NullPointerException 若特定集合不允许添加null
     * @throws IllegalArgumentException 
     * @throws IllegalStateException 
添加一个新元素。注意这个方法会返回一个boolean,但是返回值不是表示添加成功与否。 Collection规定:如果一个集合拒绝添加这个元素,无论任何原因,都必须抛出异常。这个返回值表示的意义是add()方法执行后,集合的内容是否改变了(就是元素有无数量,位置等变化),这是由具体类实现的。即:如果方法出错,总会抛出异常(这样保证了执行完这个方法后,该元素就在集合中了);返回值仅仅表示该方法执行后这个Collection的内容有无变化。
类似的方法:
boolean addAll(Collection c);
boolean remove(Object o);
boolean removeAll(Collection c);
boolean remainAll(Collection c);
     */
    boolean add(E e);

    /**
如果集合中有o对象,则删除一个,返回true,否则返回false
List<Integer> list =new ArrayList(Arrays.asList(1,3,4,2,5,2)); 
list.remove((Object)2);//删除值为2的

list.remove(2);//删除第三个元素   


     */
    boolean remove(Object o);

    /**
若含有集合c中的所有元素返回true
     */
    boolean containsAll(Collection<?> c);

    /**
添加集合c中到本集合中
     */
    boolean addAll(Collection<? extends E> c);

    /**
删除本集合中所有也在c集合的元素,操作后,本集合与c集合无交集
     */
    boolean removeAll(Collection<?> c);

    /**
删除本集合中所有不在c集合的元素,操作后,本集合只保留与c集合的交集
     */
    boolean retainAll(Collection<?> c);

    /**
清空本集合
     */
    void clear();

    /**
     */
    boolean equals(Object o);

    /**
     */
    int hashCode();
}