关于作者

用户名:panda56
笔名:水煮鱼
地区:
行业:其他

日历  

快速登录

+ 用户名:
+ 密 码:

在线留言



帮助链接

访问统计:
文章个数:125
评论个数:8
留言条数:2




Powered by BlogDriver 2.1

水煮鱼的游泳池

 

文章

下拉表格选择组件
摘要:办公室不允许上传,只能写个简单的演示 查看全文

- 作者: panda56 2006年04月30日, 星期日 13:08  回复(0) |  引用(0) 加入博采

NS6的事件模型

NS6的事件模型,同时支持两个方向的传送:window -> object -> window

具体说明见:

http://www.webreference.com/js/column74/4.html

- 作者: panda56 2006年04月30日, 星期日 10:50  回复(0) |  引用(0) 加入博采

xmlhttpreq
摘要:http://developer.apple.com/internet/webcontent/xmlhttpreq.html 查看全文

- 作者: panda56 2006年04月19日, 星期三 16:35  回复(0) |  引用(0) 加入博采

IE 6.0 的JS脚本中文问题
在IE6.0中,如果通过来引用一个JS脚本,则该本中的注释不能用中文,否则在解析该脚本时将出错。在数组中放置中文也存在同样的问题。但该特征对于6.0之前的版本则不存在。

- 作者: panda56 2006年04月19日, 星期三 09:14  回复(0) |  引用(0) 加入博采

Tiger新特性摘要

Queue
interface java.util.Queue 提供需要先进先出(FIFO)动作的时候调用.
Queue实现的正确方法是要避免标准collection的add()与remove(),相对的,需要使用offer()来加入元素,如果元素无法加入(队列已经满了)该方法将返回false.使用poll()方法来移除首端的元素,如果队列没有东西将返回null.如果想要取得首端而不移除它,可以使用element()或peek().
在Tiger中,LinkedList被改造来实现Queue interface.

PriorityQueue:使用Comparator将Queue排序.

StringBuilder
StringBuilder是在thread安全性不是问题的情况下用来直接替换StringBuffer的Tiger新引进的class.

Generic
在generic中以类通配符问号(?)来表示任何类型都是可以接受的.如:
public void printList(List<?> list, PrintStream out) throws IOException {
 for(Iterator<?> i=list.iterator(); i.hasNext();) {
  out.println(i.next().toString());
 }
}
因为编译器无法检查以确保类型安全性,所以它会拒绝对List<?>的add(),addAll()与set()所做的任何调用.换言之,将generic类型赋予通配符会使其基本上变成只读的.

参数化类型
静态变量共享于对象的实例之间,但参数化是以个别实例为单位发生的.该变量不能进行任何有关于某特定实例是某个类型的假设,因为它们有可能不同,所以下面这个是非法的:
private static List<T> staticList = new ArrayList<T>();
然而,可以使用本身有paramterized type的静态方法:
public static int biggest(Box<T> bosx1, Box<U> box2) {...}

限制类型参数
可以插入extends className到类型变量中.如
定义类:
public class NumberBox<N extends Number> extends Box<N>{...}
定义方法:
public static double sum(Box<? extends Number> box) {...}
也可以定义成下面形式:
public static <A extends Number> double sum(Box<A> box) {...}

Enum
1.Enum是class
2.Enum extends过java.lang.Enum
所有的enumberated类型都是隐含地去extend些Enum
3.Enumberated类型不是integer
每个被声明的值都是enum class它自己的实例.
4.Enum没有public 的constructor
5.Enum值是public, static 与final
6.Enum可以用==或equals()来作比较
7.Enum实现了java.lang.Comparable
因此,enum的值可以用compareTo()来作比较,而排序的顺序与值在enum定义中的声明顺序相同.
8.Enum改写toString()
这个方法不是final.
9.Enum提供了valueOf()
这个静态的valueOf()方法与toString()方法互补.
10.Enum定义名为ordinal()的final实例方法.
ordinal()返回每个enumerated值的integer位置.(从0开始)
11.Enum定义了values()方法
values()能让enum的值被iterate.
values()并不是返回String值的array,它是返回enum类实例的array.

Switch分支的Enum
在Tiger之前,switch仅能运用int,short,char以及byte值.在Tiger在switch中加入对enum的支持.使用时,Tiger要求"不要"对每个enumerated类型前置enum的class名称.

EnumMap: Enum的Map
例:EnumMap<AntStatus, String> antMessages = new EnumMap<AntStatus, String>(AntStatus.class);
其中AntStatus是一个Enum.

EnumSet: Enum的Set
java.util.EnumSet 用于对Enum中的元素进行组合.
注尽可能地使用EnumSet的of()方法来代替其range().

Enum的constractor不能使用public修饰符.

实现有Enum的Interface
例:public enum GuitarFeatures implements Features{..}

Tiger是不允许对enum作extend的.

在Tiger中,method的解析是三个pass的过程:
1.编译器试着不用任何的boxing, unboxing,或者启用vararg来定位正确的method.
2.如果第一个pass失败了.编译器会再度尝试解析method,但这次会允许boxing与unboxing转换.具有vararg的method不在这些pass的考虑范围内.
3.如果第二个pass也失败了,编译器会做最后的一次尝试,允许boxing与unboxing,且同时也考虑到vararg method.

创建可变长度的参数列表
variable argument允许指定可以采用多个同类型参数的method,而不需要事先确定参数的数目.
例子:public Guitar(String builder, String model, String... features);
用省略号(...)来表示可变长度的参数.String... features参数指出可以提供任意数量的String参数.
编译器将上面的构造方法解读成:
public Guitar(String builder, String model, String[] feautres);
限制:
1.只能在一个method中使用一个省略号;
2.省略号必须出现在method中的最后一个位置;
使用vararg的额外好处是"不"传进一个参数也是合法的选项.但也必须注意这一特性带来的可能参数为空的问题.

Annotation
三种标准Annotation类型:
1.Override
2.Deprecated
3.SupressWarnings
java.lang.SupressWarings会关掉class,method,field与variable初始化的编译器警告.
在这三种标准的Annotation类型之外,还有三种annotation
1.Marker annotation
marker annotation是给没有定义member的annotation类型使用的,它们只是提供包含在annotation本身名称中的信息.一个所有member都有默认值的annotation同样也可以当作marker使用.其语法如:
@MarkerAnnotation
2.Single-value annotation
single-value annotaion只有一个member,称为value.其语法如:
@SingleValueAnnotation("som value")
3.Full annotation
full annotation其实算不上是一类,它最多就是一个使用全方位annotation语法的annotation类型.跟在annotation名称后面的是个括号,且所有的member都被赋值:
@Reviews({//花括号表示值的array
 @Review(grade=Review.Grade.EXCELLENT, reviewer="df"),
 @Review(grade=Review.Grade.UNSATISFACTORY, reviewer="eg"
  comment="This method needs an @Override annotation")
})

Deprecated是个marker interface,使用时没有括号或者是member的值,跟Override是一样的.然而,它要与被禁止的声明被置于同一行,而Override annotation被置于前一行.如:
@Deprecated public void doSomething(){..}

仅有一个member的annotation类型会自动地传入所有的值给该member,只要些member的名称是value就可以.如
@SupperessWarnings(value={"unchecked", "fallthrough"})
public void foo() {...}
等同于
@SupperessWarnings({"unchecked", "fallthrought"})
public void foo() {...}

annotation类型在最基础的层次上,是个java interface,但是定义时必须用@interface关键定来取代interface.
例:
public @interface TODO {
 String value();
}

annotation中的默认值
例:
public @interface GroupTODO {
 public enum Severity { CRITICAL, IMPORTANT, TRIVIAL, DOCUMENTATION};
 Serverity serverity() default Serverity.IMPORTANT;
 //....
}

Annotation不能extending其它的interface,甚至是annotation类型,因为@interface关键字隐含地指出一个java.lang.annotation.Annotation的扩展.然后可以extend并实现annotation类型,虽然这样子的扩展与实现不会被当作annotation类型来对待.

对Annotation作annotate
有四种标准的meta-annotation,全部都定义在java.lang.annotation这个package中:
1.Target
这个meta-annotation指定哪个程序单元可以有其所定义的annotation.
例:
@Target({
 ElementType.TYPE,
 ElementType.METHOD,
 ElementType.CONSTRUCTOR,
 ElementType.ANNOTATION_TYPE})
public @interface TODO {...}
2.Retention
指出是否一个annotation要被编译器给丢掉,或者是保留在编译过的class文件中.在annotation被保留的情况下,它也指定是否它会对java virtual machine加载class时读取该annotation
例:
@Retention(RetentionPolicy.CLASS)
public @interface TODO {...}
3.Documented
指出被定义的annotation应该被视为所注释的程序单元的公开API之一.
例:
@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface InProgress{}
任何时候使用到Document annotation,就应该成对地加入Retention.RUNTIME这个retention策略.
4.Inherited
被应用于目标为class的annotation类型上,指出这些被annotated的类型是通过继承得到的.
即这些annotation在子类中仍然可见.
例:
@Documented
@Inherited
@Retention(RetentionPolicy.RUNTIME)
public @interface InProgress{}
被标示为Inherited的annotation仅能应用于subclass,所以实现一个带有annotation的method并不会产生出会被继承的annotation.

Annotation的Reflecting.
java.lang.reflect.AnnotatedElement接口,在Tiger中,核心的reflection构造都实现了这个interface,包括:Class,Constructor, Field, Method, Package与AccessibleObject

For/In
for(declaration : expression)
 statement
1.expression必须是array或者一个实现java.lang.Iterable接口的对象.
2.array类型或者Iterable元素必须是分配兼容(assignment-compatible)于在declaration中声明的变量类型.
3.declaration通常仅由类型与变量名称所组成,但它可以包括final修饰符以及合宜的annotation.使用final可防止循环变量采用任何非循环所指定的array或collection的值.并且array或者collection不能通过循环变量来修改.
4.for/in的循环变量,包括类型与变量名称都必须要声明在循环中.

for/in中无法做做到的事情:
1.反向iterate array或者List的元素
2.使用单一的循环计数器来存取有相同数目或位置的两个不同的array或collection中的元素
3.调用get()而不是iterator来iterate list的元素.

格式化
java.util.Formatter

- 作者: panda56 2006年02月12日, 星期日 18:03  回复(0) |  引用(0) 加入博采

Java中的复制,剪切,粘贴(1)

Jean -Pierre Dube (1998年10月1号)

Java提供两种类型的剪贴板:系统的和本地的.
本地剪贴板只在当前虚拟机中有效.Java允许多个本地剪贴板同时存在,可以方便地通过剪贴板的名称来进行存取访问.
系统剪贴板与同等操作系统直接关连,允许应用程序与运行在该操作系统下的其它程序之间进行信息交换.

在进一步深入之前,先看看与剪贴板相同的java类,这些类主要包含在java.awt.datatransfer包中,主要有以下几种:
Clipboard类: 处理任何可以被传递的对象.
ClipboardOwner接口: 任何处理剪贴板的类都必须实现该接口.该接口用于剪贴板中的原始数据被替换时发出通知.
Dataflavor类: 表现被传递的对象支持的所有数据类型.
StringSelection类: java支持的一种可被传递的类.
Transferable接口: 包装传递到剪贴板的对象.
UnsupportedFlavor Exception类: 由可传递对象抛出的异常,表示不对象的数据类型(data flavor)

- 作者: panda56 2006年01月17日, 星期二 16:22  回复(0) |  引用(0) 加入博采

Java中的复制,剪切,粘贴(1)

Jean -Pierre Dube (1998年10月1号)

Java提供两种类型的剪贴板:系统的和本地的.
本地剪贴板只在当前虚拟机中有效.Java允许多个本地剪贴板同时存在,可以方便地通过剪贴板的名称来进行存取访问.
系统剪贴板与同等操作系统直接关连,允许应用程序与运行在该操作系统下的其它程序之间进行信息交换.

在进一步深入之前,先看看与剪贴板相同的java类,这些类主要包含在java.awt.datatransfer包中,主要有以下几种:
Clipboard类: 处理任何可以被传递的对象.
ClipboardOwner接口: 任何处理剪贴板的类都必须实现该接口.该接口用于剪贴板中的原始数据被替换时发出通知.
Dataflavor类: 表现被传递的对象支持的所有数据类型.
StringSelection类: java支持的一种可被传递的类.
Transferable接口: 包装传递到剪贴板的对象.
UnsupportedFlavor Exception类: 由可传递对象抛出的异常,表示不对象的数据类型(data flavor)

Clipboard类
Clipboard是存取剪贴板的链接.它包含三个方法:
String getName()
void setContents(Transferable, ClipboardOwner)
Transferable getContent(Object)
访问系统剪贴板,可以瘵系统剪贴板的引用赋值给一个Clipboard对象,如:
Clipboard clipboard = getToolKit().getSystemClipboard();
创建一个本地剪贴板,可以通过传递剪贴板的名称到构造方法中:
Clipboard clipboard = new Clipboard("My first clipboard");

ClipboardOwner接口
ClipboardOwner唯一的功能就是当(剪贴板)拥有者的数据被其它类覆盖时通知它.同时它可以用用通知应用程序释放关联到数据的资源的信号.
在具体应用中,lostOwnership方法可以用于设置标志,该标志用于通知应用有关剪贴板中数据的可见性.

- 作者: panda56 2006年01月17日, 星期二 16:21  回复(0) |  引用(0) 加入博采

Java中的复制,剪切,粘贴(1)

Jean -Pierre Dube (1998年10月1号)

Java提供两种类型的剪贴板:系统的和本地的.
本地剪贴板只在当前虚拟机中有效.Java允许多个本地剪贴板同时存在,可以方便地通过剪贴板的名称来进行存取访问.
系统剪贴板与同等操作系统直接关连,允许应用程序与运行在该操作系统下的其它程序之间进行信息交换.

在进一步深入之前,先看看与剪贴板相同的java类,这些类主要包含在java.awt.datatransfer包中,主要有以下几种:
Clipboard类: 处理任何可以被传递的对象.
ClipboardOwner接口: 任何处理剪贴板的类都必须实现该接口.该接口用于剪贴板中的原始数据被替换时发出通知.
Dataflavor类: 表现被传递的对象支持的所有数据类型.
StringSelection类: java支持的一种可被传递的类.
Transferable接口: 包装传递到剪贴板的对象.
UnsupportedFlavor Exception类: 由可传递对象抛出的异常,表示不对象的数据类型(data flavor)

Clipboard类
Clipboard是存取剪贴板的链接.它包含三个方法:
String getName()
void setContents(Transferable, ClipboardOwner)
Transferable getContent(Object)
访问系统剪贴板,可以瘵系统剪贴板的引用赋值给一个Clipboard对象,如:
Clipboard clipboard = getToolKit().getSystemClipboard();
创建一个本地剪贴板,可以通过传递剪贴板的名称到构造方法中:
Clipboard clipboard = new Clipboard("My first clipboard");

ClipboardOwner接口
ClipboardOwner唯一的功能就是当(剪贴板)拥有者的数据被其它类覆盖时通知它.同时它可以用用通知应用程序释放关联到数据的资源的信号.
在具体应用中,lostOwnership方法可以用于设置标志,该标志用于通知应用有关剪贴板中数据的可见性.

- 作者: panda56 2006年01月17日, 星期二 16:20  回复(0) |  引用(0) 加入博采

Eclipse图标(转)

1、是不是经常开发awt/swing或者swt/jface程序为图标发愁呢,图标不好看?图标不配套?

2、现在我都是经常从eclipse中拿来现成的,自己建一个常用的图标库。

3、eclipse的所有图标都在这几个文件夹里:

org.eclipse.debug.ui/icons
org.eclipse.pde.ui/icons
org.eclipse.jdt.ui/icons
org.eclipse.vcm.ui/icons
org.eclipse.team.ui/icons
org.eclipse.ant.ui/icons
org.eclipse.help.ui/icons
org.eclipse.ui/icons
org.eclipse.ui.views/icons
org.eclipse.ui.console/icons

4、codehaus里有张网页把eclipse的部分图标放在了一起,要用的话直接从这里面抠也行。

- 作者: panda56 2006年01月12日, 星期四 13:54  回复(0) |  引用(0) 加入博采

获取组件上字体的长度

获取组件上字体的长度(以JButton为例)
1.
FontMetrics fm = Toolkit.getDefaultToolkit().getFontMetrics(button.getFont());
int width = fm.stringWidth(button.getText());
2.
FontMetrics fm = button.getGraphics().getFontMetrics();
int width = fm.stringWidth(button.getText());
3.
Font f = new Font("Serif", Font.BOLD, 24);
FontMetrics fm = button.getGraphics().getFontMetrics(f);
int width = fm.stringWidth(button.getText());

4.
FontMetrics fm = button.getFontMetrics();
int width = fm.stringWidth(button.getText());

- 作者: panda56 2005年11月25日, 星期五 14:40  回复(0) |  引用(0) 加入博采