日历
| |||||||||
| 日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
| 1 | 2 | 3 | 4 | 5 | |||||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 | |||
| 13 | 14 | 15 | 16 | 17 | 18 | 19 | |||
| 20 | 21 | 22 | 23 | 24 | 25 | 26 | |||
| 27 | 28 | 29 | 30 | 31 | |||||
搜索标题
最新评论
我的收藏
统计信息
- 访问量: 677
- 日志数: 9
- 建立时间: 2007-08-16
- 更新时间: 2008-04-28
我的最新日志
-
ubuntu verion information
2008-4-28
qqtian@qqtian-laptop:~$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=8.04
DISTRIB_CODENAME=hardy
DISTRIB_DEscrīptION="Ubuntu 8.04"
-
javax.swing.InputVerifier
2008-1-23
public abstract class InputVerifier
- extends Object
此类的用途是通过带文本字段的 GUI 帮助客户端支持流畅的焦点导航。在允许用户导航到文本字段以外之前,这类 GUI 常常需要确保用户输入的文本是有效的(例如,文本具有正确的格式)。为做到这一点,客户端要使用JComponent的setInputVerifier方法创建InputVerifier的子类,并将其子类的实例附加到想要验证其输入的JComponent中。在将焦点转移到另一个请求它的 Swing 组件之前,要调用输入验证器的shouldYieldFocus方法。只在该方法返回true时才转移焦点。
方法说明:InputVerifier (Java 2 Platform SE 5.0) public abstract boolean verify(JComponent input)- 检查 JComponent 的输入是否有效。此方法不应有副作用。该方法返回一个指示参数的输入状态的 boolean 值。
-
- 参数:
input- 要验证的 JComponent- 返回:
- 在有效时返回
true,在无效时返回false
InputVerifier (Java 2 Platform SE 5.0)public boolean shouldYieldFocus(JComponent input)- 调用
verify(input)来确保输入是有效的。此方法可以有副作用。需要特别指出的是,在用户试图将焦点移出参数组件进入此窗口中的另一个 Swing 组件时调用此方法。如果此方法返回true,那么正常转移焦点;如果该方法返回false,则焦点仍然留在参数组件中。 -
- 参数:
input- 要验证的 JComponent- 返回:
- 在有效时返回
true,在无效时返回false
- extends Object
-
java焦点子系统
2008-1-21
java tutorials
http://java.sun.com/docs/books/tutorial/uiswing/misc/focus.html
KeyboardFocusManager简介
KeyboardFocusManager类用于管理与新的AWT焦点子系统的焦点相关的任务。它负责活动的和已定焦的窗口以及当前的焦点所有者。它的任务是让客户机代码可以启动焦点的更改并调度与焦点相关的所有事件。
确定当前的焦点所有者和焦点窗口
当前的焦点所有者是新的AWT焦点模型中的一个关键元素。所有遍历操作都从当前的焦点所有者或从另一个被虚拟的认作焦点所有者的组件开始。每个给定时间只 能有一个当前的焦点所有者。当前的焦点所有者是个已收到FOCUS_GAINED事件—但还未收到FOCUS_LOST事件的组件
确定焦点更改中的对立组件
FOCUS_LOST和FOCUS_GAINED
WINDOW_ACTIVATED和WINDOW_DEACTIVATED
WINDOW_LOST_FOCUS和WINDOW_GET_FOCUS
当调遣其中的一个事件时,总是同时调遣了这个事件的对立事件。焦点更改的对立组件只是个获取对立事件的组件。例如,当一个组件获得了焦点时,其对立组件就是那个失去该焦点的组件。
FocusEvent.getOppositeComponent()方法和WindowEvent.getOppositeWindow()方法返回 焦点更改所涉及的对立组件或窗口。上面列出的六个焦点事件和这两个方法密切相关。当一个窗口得到一个WINDOW_DEACTIVATED事件 时,getOppositeWindow()方法查找获取WINDOW_ACTIVATED事件的窗口。如果其对立组件或窗口处于一个不同的上下文,这些方法中每一个都会返回空。
Componet类、Container类和Windows类中的新方法
Component.isFocusable()传达了组件是否可以定焦。所有组件缺省的返回值都为真,因为所有组件在缺省情况下都是可定焦的。
Component.setFocusable(boolean)设置组件是否可定焦。
FocusTraversalPolicy类定义了组件遍历的顺序。该类应该提供不同的方法分别确定前一个、后一个、第一个、最后一个组件及缺省组件。它负责调遣关键事件、焦点事件和焦点相关的窗口事件。
-
利用反射实现事件委托类
2007-12-10
摘自:http://blog.csdn.net/frank_softworks/archive/2007/08/25/1758329.aspx
使用java的事件模型的例子:
public class EventDelegate extends JFrame{
public EventDelegate() {
super();
createAndShowGUI();
}
private void createAndShowGUI() {
JButton button = new JButton("abc");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
System.out.println("Press");
}
});
this.getContentPane().add(button);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setVisible(true);
}
public static void main(String[]args) {
new EventDelegate();
}
}
使用事件委托类的例子:
public class EventDelegate extends JFrame{
public EventDelegate() {
super();
createAndShowGUI();
}
private void createAndShowGUI() {
JButton button = new JButton("abc");
button.addActionListener(new EventHandler(this,"btn_abc"));
this.getContentPane().add(button);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setVisible(true);
}
public static void main(String[]args) {
new EventDelegate();
}
public void btn_abc(ActionEvent e) {
System.out.println("press");
}
}
class EventHandler implements ActionListener {
//组件所在的窗体对象
private Object form = null;
//受到委托的方法名
private String methodName = null;
public EventHandler(Object form, String methodName) {
this.form = form;
this.methodName = methodName;
}
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
Class formType = this.form.getClass();
try {
Method method = formType.getMethod(methodName, new Class[] {e.getClass()});
method.invoke(this.form, new Object[] {e});
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
-
soulmate
2007-10-18
什么叫soulmate?托马斯·摩尔说:“一个灵魂伴侣,就是一个我们感到自身与之深深联系在一起的人,好像彼此的沟通和交流不是出于凡人的刻意努力,而是凭借神恩的导引。这种关系对于灵魂来说是如此重要,可以说没有什么在生活中比它更为珍贵的了。”
所谓灵魂伴侣,起源于希腊神话。在柏拉图《会饮篇》中,阿伽松(Agathon)举行了一场别具一格的“会饮”:既不饮酒也不要吹笛女,“用讨论问题来作为今晚的消遣”(176E),“从左到右,每个人都尽力赞美爱神”。阿里斯托芬(Aristophones)讲了上古时代的一个神话故事:最初的人是球形的人,两个个体背靠背粘合在一起,有两张脸,八只手和脚,两副生殖器。宙斯和众神担心人类过于强大,不敬神灵,于是把球形的人劈成两半,所以“我们每个人都只是半个人”,“我们每个人都一直在寻求与自己相结合的另一半”(191D)。“爱是成就这种功德的神……使我们恢复原初状态,生活在快乐与幸福之中”(193D)。
"A soul mate," says author Thomas Moore, "is someone to whom we feel profoundly connected, as though the communication and communing that take place between us were not the product of intentional efforts, but rather a divine grace. This kind of relationship is so important to the soul that many have said there is nothing more precious in life," he says."
-
Tree,table,treetable中的右键菜单
2007-8-31
给Tree添加鼠标事件监听器MouseListener。
重写其中的方法。
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
if (e.getButton() == MouseEvent.BUTTON3) {
TreePath treePath = treeTable.getPathForLocation(e.getX(), e.getY());
if (treePath != null){
treeTable.getTreeSelectionModel().setSelectionPath(treePath);
popupMenu.show(treeTable.getComponentAt(e.getX(), e.getY()), e.getX(), e.getY());
}
}
}
1)取得右键点击所在行
int row=evt.getY()/table.getRowHeight()
2)没有用鼠标左键点击树节点的情况下,直接用鼠标右键点击树节点,使当前被点击的树节点处在被选择状态,同时弹出快捷菜单。
TreePath treePath = treeTable.getPathForLocation(e.getX(), e.getY());
if (treePath != null){
treeTable.getTreeSelectionModel().setSelectionPath(treePath);
3)e.getModifiers()==Event.META_MASK
Event.META_MASK就是右键 -
道
2007-8-16
过去有一位年轻和尚,一心求道,希望有日成佛。但是,多年苦修参禅,似乎没有进步。
有一天,他打听到深山中有一破旧古寺,住持某老和尚修炼圆通,是得道高僧。
于是,年轻和尚打点行装,跋山涉水,千辛万苦来到老和尚面前。
两人打起了机锋。
年轻和尚:请问老和尚,你得道之前,做什么?
老和尚:砍柴担水做饭。
年轻和尚:那得道之后,又做什么?
老和尚:还是砍柴担水做饭。
年轻和尚于是哂笑:那何谓得道?
老和尚:我得道之前,砍柴时惦念着挑水,挑水时惦念着做饭,做饭时有想着砍柴;得道之后,砍柴即砍柴,担水即担水,做饭即做饭。这就是得道。 -
JAVA Relection
2007-8-16
帮助文档
Tutorials
API
另一篇不错的文章
概述Reflection 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说“自审”,并能直接操作程序的内部属性。例如,使用它能获得 Java 类中各成员的名称并显示出来。
Java 的这一能力在实际应用中也许用得不是很多,但是在其它的程序设计语言中根本就不存在这一特性。例如,Pascal、C 或者 C++ 中就没有办法在程序中获得函数定义相关的信息。具体应用
1)JavaBean 是 reflection 的实际应用之一,它能让一些工具可视化的操作软件组件。这些工具通过reflection 动态的载入并取得Java 组件(类) 的属性。
三个步骤:
第一步是获得你想操作的类的java.lang.Class对象。
Class c = Class.forName("java.lang.String");
这条语句得到一个 String 类的类对象(类的对象和类的类对象的区别)。
还有另一种方法,如下面的语句:
Class c = int.class;
或者
Class c = Integer.TYPE;
它们可获得基本类型的类信息。其中后一种方法中访问的是基本类型的封装类 (如 Integer) 中预先定义好的 TYPE 字段。
第二步是调用诸如getDeclaredMethods 的方法,以取得该类中定义的所有方法的列表。
第三步使用 reflection API 来操作这些信息
2)模拟 instanceof 操作符
Class.isInstance 方法可以用于模拟 instanceof 操作符:
Class cls = Class.forName("java.lang.String");
boolean b1 = cls.isInstance(new Integer(37)); //b1 = false
boolean b2 = cls.isInstance(new String("ab")); //b2 = true
3)找出类的方法
首先取得类的描述,然后调用 getDeclaredMethods 来获取一系列的 Method 对象,它们分别描述了定义在类中的每一个方法,包括public 方法、protected 方法、package 方法和 private 方法等。如果你在程序中使用getMethods来代替 getDeclaredMethods,你还能获得继承来的各个方法的信息。取得了 Method 对象列表之后,要显示这些方法的参数类型、异常类型和返回值类型等就不难了。这些类型是基本类型还是类类型,都可以由描述类的对象按顺序给。
4)获取构造器信息
5)获取类的字段(域)
Modifier,它也是一个 reflection 类,用来描述字段成员的修饰语,如“private int”。这些修饰语自身由整数描述,而且使用Modifier.toString 来返回以“官方”顺序排列的字符串描述(如“static”在final”之前)。和获取方法的情况一下,获取字段的时候也可以只取得在当前类中申明了的字段信息(getDeclaredFields),或者也可以取得父类中定义的字段(getFields) 。6)根据方法的名称来执行方法
Method meth = cls.getMethod("add", partypes); //add方法名,参数类类型
method2 methobj = new method2();
Object retobj = meth.invoke(methobj, arglist); //methobj类实例 ,arglist参数
getMethod 用于查找一个具有两个整型参数且名为 add 的方法。找到该方法并创建了相应的 Method 对象之后,在正确的对象实例中执行它。执行该方法的时候,需要提供一个参数列表.
7)创建新的对象
对于构造器,则不能像执行方法那样进行,因为执行一个构造器就意味着创建了一个新的对象 (准确的说,创建一个对象的过程包括分配内存和构造对象)。
Constructor ct = cls.getConstructor(partypes); //partypes参数类类型
Object retobj = ct.newInstance(arglist); //arglist参数
根据指定的参数类型找到相应的构造函数并执行它,以创建一个新的对象实例。使用这种方法可以在程序运行时动态地创建对象,而不是在编译的时候创建对象,这一点非常有价值。
8)改变字段(域)的值
reflection 的还有一个用处就是改变对象数据字段的值。reflection 可以从正在运行的程序中根据名称找到对象的字段并改变它
Class cls = Class.forName("field2");
Field fld = cls.getField("d");
field2 f2obj = new field2();
fld.setDouble(f2obj, 12.34);10)使用数组
Class cls = Class.forName("java.lang.String");
Object arr = Array.newInstance(cls, 10);
Array.set(arr, 5, "this is a test");
String s = (String)Array.get(arr, 5);
System.out.println(s);创建了 10 个单位长度的 String 数组,为第 5 个位置的字符串赋了值,最后将这个字符串从数组中取得并打印了出来。
