top。add(name);
lower。add(
new Label(〃String to search for:〃));
lower。add(searchFor);
lower。add(strip);
p。setLayout(new BorderLayout());
p。add(top; BorderLayout。NORTH);
p。add(lower; BorderLayout。SOUTH);
setLayout(new BorderLayout());
add(p; BorderLayout。NORTH);
add(results; BorderLayout。CENTER);
}
class NameL implements TextListener {
public void textValueChanged(TextEvent e) {
String nm = name。getText()。trim();
if(nm。length() == 0) {
results。setText(〃No match〃);
n = new String'0';
return;
}
try {
cl = Class。forName(nm);
} catch (ClassNotFoundException ex) {
results。setText(〃No match〃);
return;
}
640
…………………………………………………………Page 642……………………………………………………………
m = cl。getMethods();
ctor = cl。getConstructors();
// Convert to an array of Strings:
n = new String'm。length + ctor。length';
for(int i = 0 ; i 《 m。length; i++)
n'i' = m'i'。toString();
for(int i = 0; i 《 ctor。length; i++)
n'i + m。length' = ctor'i'。toString();
reDisplay();
}
}
void reDisplay() {
// Create the result set:
String'' rs = new String'n。length';
String find = searchFor。getText();
int j = 0;
// Select from the list if find exists:
for (int i = 0; i 《 n。length; i++) {
if(find == null)
rs'j++' = n'i';
else if(n'i'。indexOf(find) != …1)
rs'j++' = n'i' ;
}
results。setText(〃〃);
if(strip。getState() == true)
for (int i = 0; i 《 j; i++)
results。append(
StripQualifiers。strip(rs'i') + 〃n〃);
else // Leave qualifiers on
for (int i = 0; i 《 j; i++)
results。append(rs'i' + 〃n〃);
}
class StripL implements ItemListener {
public void itemStateChanged(ItemEvent e) {
reDisplay();
}
}
class SearchForL implements TextListener {
public void textValueChanged(TextEvent e) {
reDisplay();
}
}
public static void main(String'' args) {
DisplayMethods applet = new DisplayMethods();
Frame aFrame = new Frame(〃Display Methods〃);
aFrame。addWindowListener(
new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System。exit(0);
}
});
aFrame。add(applet; BorderLayout。CENTER);
641
…………………………………………………………Page 643……………………………………………………………
aFrame。setSize(500;750);
applet。init();
applet。start();
aFrame。setVisible(true);
}
}
class StripQualifiers {
private StreamTokenizer st;
public StripQualifiers(String qualified) {
st = new StreamTokenizer(
new StringReader(qualified));
st。ordinaryChar(" ");
}
public String getNext() {
String s = null;
try {
if(st。nextToken() !=
StreamTokenizer。TT_EOF) {
switch(st。ttype) {
case StreamTokenizer。TT_EOL:
s = null;
break;
case StreamTokenizer。TT_NUMBER:
s = Double。toString(st。nval);
break;
case StreamTokenizer。TT_WORD:
s = new String(st。sval);
break;
default: // single character in ttype
s = String。valueOf((char)st。ttype);
}
}
} catch(IOException e) {
System。out。println(e);
}
return s;
}
public static String strip(String qualified) {
StripQualifiers sq =
new StripQualifiers(qualified);
String s = 〃〃; si;
while((si = sq。getNext()) != null) {
int lastDot = si。lastIndexOf("。");
if(lastDot != …1)
si = si。substring(lastDot + 1);
s += si;
}
return s;
}
} ///:~
642
…………………………………………………………Page 644……………………………………………………………
程序中的有些东西已在以前见识过了。和本书的许多GUI 程序一样,这既可作为一个独立的应用程序使用,
亦可作为一个程序片(Applet)使用。此外,StripQualifiers 类与它在第 11 章的表现是完全一样的。
GUI 包含了一个名为name 的“文本字段”(TextField),或在其中输入想查找的类名;还包含了另一个文
本字段,名为 searchFor,可选择性地在其中输入一定的文字,希望在方法列表中查找那些文字。Checkbox
(复选框)允许我们指出最终希望在输出中使用完整的名字,还是将前面的各种限定信息删去。最后,结果
显示于一个“文本区域”(TextArea )中。
大家会注意到这个程序未使用任何按钮或其他组件,不能用它们开始一次搜索。这是由于无论文本字段还是
复选框都会受到它们的“侦听者(Listener )对象的监视。只要作出一项改变,结果列表便会立即更新。若
改变了name 字段中的文字,新的文字就会在 NameL 类中捕获。若文字不为空,则在Class。forName()中用于
尝试查找类。当然,在文字键入期间,名字可能会变得不完整,而Class。forName()会失败,这意味着它会
“掷”出一个违例。该违例会被捕获,TextArea 会随之设为“Nomatch”(没有相符)。但只要键入了一个
正确的名字(大小写也算在内),Class。forName()就会成功,而 getMethods()和 getConstructors()会分别
返回由Method 和 Constructor 对象构成的一个数组。这些数组中的每个对象都会通过toString()转变成一
个字串(这样便产生了完整的方法或构建器签名),而且两个列表都会合并到 n 中——一个独立的字串数
组。数组n 属于DisplayMethods 类的一名成员,并在调用reDisplay()时用于显示的更新。
若改变了Checkbox 或 searchFor 组件,它们的“侦听者”会简单地调用reDisplay()。reDisplay()会创建
一个临时数组,其中包含了名为rs 的字串(
小说推荐
- 软件工程实践者的思想(PDF格式)
- -Page 1-大 道 至 简—软件工程实践者的思想周爱民(Aimingoo 著-Page 2-序2004 年 11 月初爱民(Aimingoo)第一次把他的书稿给我,我翻看了一下,第一反应讲的是感想。这不错,在技
- 最新章:第26章
- 深入浅出MFC第2版(PDF格式)
- -Page 1-Page 2-山高月小山高月小 水落石出水落石出山高月小山高月小 水落石出水落石出-Page 3-深入淺出MFC(第版 使用Visual C 5.0 MFC 4.2)Dissecting MFC(Second Edition Using Visual C 5.0 MFC 4.2)侯俊
- 最新章:第309章
- VB2008从入门到精通(PDF格式英文版)
- -Page 1(R)The eXperT’s Voice inBeginningVB 2008From Novice to ProfessionalChristian Gross-Page 2-Page 3-Beginning VB 2008From Novice to Professional■C
- 最新章:第214章
- C语言游戏编程从入门到精通(PDF格式)
- -Page 1-Page 2-Page 3-Page 4-Page 5-Page 6-Page 7-Page 8-Page 9-Page 10-Page 11-Page 12-Page 13-Page 14
- 最新章:第4章
- JMS简明教程(PDF格式)
- -Page 1-JMS1.1规范中文版卫建军2007‐11‐22-Page 2
- 最新章:第28章
- C语言实例教程(PDF格式)
- -Page 1-前 言Visual C+是开发运行于Windows 95和Windows NT环境下的Win32应用程序的可视化编程工具中最重要的成员之一,它为软件开发人员提供了完整的编辑、编译和调试工具和建立于Win32 API(ApplicationProgramming Interface)基
- 最新章:第143章
- 神祗之眼 (正式版)第7卷(全文完)作者:百里芜虚
- 第五十一章离12月25日的圣诞节还有两天,纽约已经换上了节日的盛装,几天前的一场大雪令整个城市一片银白。人们笑逐颜开,都纷纷开始为节日做准备,商家为了在节日打开销路纷纷推出各种优惠促销手段,纽约的大街小巷全都这样热闹。依沙那被老婆打发出来买过节要用的杂货,而女儿则和凯妮一起到百货商场去买衣服去了。对
- 最新章:第23章
- SQL语言艺术(PDF格式)
- -Page 1-SQLSSQQLL语言艺术内容介绍本书分为12章,每一章包含许多原则或准则,并通过举例的方式对原则进行解释说明。这些例子大多来自于实际案例,对九种SQL经典查询场景以及其性能影响讨论,非常便于实践,为你数据库应用维护人员阅读。资深 SQL 专家 Stéphane Faroult倾力打
- 最新章:第27章
- php程序设计简明教程(DOC格式)
- -Page 1-PHP 程序设计简明教程PHP 讲义 第 1 页 共 90 页-Page 2-目录序 4第一章 PHP 简介 6
- 最新章:第31章