按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
用这种方法,上面的例子就变成了:
//: Button3。java
// Matching events on button text
import java。awt。*;
import java。applet。*;
public class Button3 extends Applet {
Button
b1 = new Button(〃Button 1〃);
b2 = new Button(〃Button 2〃);
public void init() {
add(b1);
add(b2);
}
public boolean action (Event evt; Object arg) {
if(arg。equals(〃Button 1〃))
getAppletContext()。showStatus(〃Button 1〃);
else if(arg。equals(〃Button 2〃))
getAppletContext()。showStatus(〃Button 2〃);
// Let the base class handle it:
else
return super。action(evt; arg);
return true; // We've handled it here
}
} ///:~
很难确切知道equals()方法在这儿要做什么。这种方法有一个很大的问题,就是开始使用这个新技术的 Java
程序员至少需要花费一个受挫折的时期来在比较按钮上的文字时发现他们要么大写了要么写错了(我就有这
种经验)。同样,如果我们改变了按钮上的文字,程序代码将不再工作(但我们不会得到任何编译时和运行
时的信息)。所以如果可能,我们就得避免使用这种方法。
13。5 文本字段
“文本字段”是允许用户输入和编辑文字的一种线性区域。文本字段从文本组件那里继承了让我们选择文
字、让我们像得到字符串一样得到选择的文字,得到或设置文字,设置文本字段是否可编辑以及连同我们从
在线参考书中找到的相关方法。下面的例子将证明文本字段的其它功能;我们能注意到方法名是显而易见
的:
//: TextField1。java
// Using the text field control
import java。awt。*;
import java。applet。*;
public class TextField1 extends Applet {
Button
b1 = new Button(〃Get Text〃);
384
…………………………………………………………Page 386……………………………………………………………
b2 = new Button(〃Set Text〃);
TextField
t = new TextField(〃Starting text〃; 30);
String s = new String();
public void init() {
add(b1);
add(b2);
add(t);
}
public boolean action (Event evt; Object arg) {
if(evt。target。equals(b1)) {
getAppletContext()。showStatus(t。getText());
s = t。getSelectedText();
if(s。length() == 0) s = t。getText();
t。setEditable(true);
}
else if(evt。target。equals(b2)) {
t。setText(〃Inserted by Button 2: 〃 + s);
t。setEditable(false);
}
// Let the base class handle it:
else
return super。action(evt; arg);
return true; // We've handled it here
}
} ///:~
有几种方法均可构建一个文本字段;其中之一是提供一个初始字符串,并设置字符域的大小。
按下按钮 1 是得到我们用鼠标选择的文字就是得到字段内所有的文字并转换成字符串 S。它也允许字段被编
辑。按下按钮2 放一条信息和字符串 s 到Text fields,并且阻止字段被编辑(尽管我们能够一直选择文
字)。文字的可编辑性是通过 setEditable() 的真假值来控制的。
13。6 文本区域
“文本区域”很像文字字段,只是它拥有更多的行以及一些引人注目的更多的功能。另外你能在给定位置对
一个文本字段追加、插入或者修改文字。这看起来对文本字段有用的功能相当不错,所以设法发现它设计的
特性会产生一些困惑。我们可以认为如果我们处处需要“文本区域”的功能,那么可以简单地使用一个线型
文字区域在我们将另外使用文本字段的地方。在Java 1。0 版中,当它们不是固定的时候我们也得到了一个文
本区域的垂直和水平方向的滚动条。在Java 1。1 版中,对高级构建器的修改允许我们选择哪个滚动条是当前
的。下面的例子演示的仅仅是在Java1。0 版的状况下滚动条一直打开。在下一章里我们将看到一个证明 Java
1。1版中的文字区域的例程。
//: TextArea1。java
// Using the text area control
import java。awt。*;
import java。applet。*;
public class TextArea1 extends Applet {
Button b1 = new Button(〃Text Area 1〃);
Button b2 = new Button(〃Text Area 2〃);
Button b3 = new Button(〃Replace Text〃);
Button b4 = new Button(〃Insert Text〃);
TextArea t1 = new TextArea(〃t1〃; 1; 30);
385
…………………………………………………………Page 387……………………………………………………………
TextArea t2 = new TextArea(〃t2〃; 4; 30);
public void init() {
add(b1);
add(t1);
add(b2);
add(t2);
add(b3);
add(b4);
}
public boolean action (Event evt; Object arg) {
if(evt。target。equals(b1))
getAppletContext()。showStatus(t1。getText());
else if(evt。target。equals(b2)) {
t2。setText(〃Inserted by Button 2〃);
t2。appendText(〃: 〃 + t1。getText());
getAppletContext()。showStatus(t2。getText());
}
else if(evt。target。equals(b3)) {
String s = 〃 Replacement 〃;
t2。replaceText(s; 3; 3 + s。length());
}
else if(evt。target。equals(b4))
t2。insertText(〃 Inserted 〃; 10);
// Let the base class handle it:
else
return super。action(evt; arg);
return true; // We've handled it here
}
} ///:~
程序中有几个不同的“文本区域”构建器,这其中的一个在此处显示了一个初始字符串和行号和列号。不同
的按钮显示得到、追加、修改和插入文字。
13。7 标签
标签准确地运作:安放一个标签到窗体上。这对没有标签的TextFields 和Text areas 来说非常的重要,如
果我们简单地想安放文字的信息在窗体上也能同样的使用。我们能像本章中第一个例程中演示的那样,使用
drawString()里边的 paint()在确定的位置去安置一个文字。当我们使用的标签允许我们通过布局管理加入
其它的文字组件。(在这章的后面我们将进入讨论。)
使用构建器我们能创建一条包括初始化文字的标签(这是我们典型的作法),一个标签包括一行 CENTER (中
间)、LEFT (左)和RIGHT(右)(静态的结果取整定义在类标签里)。如果我们忘记了可以用getText()和
getalignment()读取值,我们同样可以用 setText()和 setAlignment()来改变和调整。下面的例子将演示标
签的特点:
//: Label1。java
// Using labels
import java。awt。*;
import java。applet。*;
public class Label1 extends Applet {
TextField t1 = new TextField(〃t1〃; 10);
Label labl1 = new Label(〃TextField t1〃);
Label labl2 = new Label(〃 〃);
386
…………………………………………………………Page 388……………………………………………………………
Label labl3 = new Label(〃 〃;
Labe l。RIGHT);
Button b1 = new Button(〃Test 1〃);
Button b2 = new Button(〃Test 2〃);
public void init() {
add(labl1); add(t1);
add(b1); add(labl2);
add(b2); add(labl3);
}
public boolean action (Event evt; Object arg) {
if(evt。target。equa ls(b1))
labl2。setText(〃Text set into Label〃);
else if(evt。target。equals(b2)) {
if(labl3。getText()。trim()。length() == 0)
labl3。setText(〃labl3〃);
if(labl3。getAlignment() == Label。LEFT)
labl3。setAlignment(Label。CENTER);
else if(labl3。getAlignment()==Label。CENTER)
labl3。setAlignment(Label。RIGHT);
else if(labl3。getAlignment() == Label。RIGHT)
labl3。setAlignment(Label。LEFT);
}
else
return super。action(evt; arg);
return true;
}
} ///:~
首先是标签的最典型的用途:标记一个文本字段或文本区域。在例程的第二部分,当我们按下“test 1”按
钮通过 setText()将一串空的空格插入到的字段里。因为空的空格数不等于同样的字符数(在一个等比例间
隔的字库里),当插入文字到标签里时我们会看到文字将被省略掉。在例子的第三部分保留的空的空格在我
们第一次按下“test 2”会发现标签是空的(trim()删除了每个字符串结尾部分的空格)并且在开头的左列
插入了一个短的标签。在工作的其余时间中我们按下按钮进行调整,因此就能看到效果。
我们可能会认为我们可以创建一个空的标签,然后用setText()安放文字在里面。然而我们不能在一个空标
签内加入文字-这大概是因为空标签没有宽度-所以创建一个没有文字的空标签是没有用处的。在上面的例
子里,“blank”标签里充满空的空格,所以它足够容纳后面加入的文字。
同样的,setAlignment()在我们用构建器创建的典型的文字标签上没有作用。这个标签的宽度就是文字的宽