按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
容。正像我们看到的,这十分方便(注释⑥)。
⑥:它也解决了“回调”的问题,不必为 Java 加入任何令人恼火的“方法指针”特性。
2。 文本区域
Java 1。1 版中Text Area 最重要的改变就滚动条。对于 TextArea 的构建器而言,我们可以立即控制
TextArea 是否会拥有滚动条:水平的,垂直的,两者都有或者都没有。这个例子更正了前面Java 1。0 版
TextArea1。java 程序片,演示了Java 1。1 版的滚动条构建器:
//: TextAreaNew。java
// Controlling scrollbars with the TextArea
// ponent in Java 1。1
import java。awt。*;
import java。awt。event。*;
import java。applet。*;
public class TextAreaNew 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);
TextArea t2 = new TextArea(〃t2〃; 4; 30);
TextArea t3 = new TextArea(〃t3〃; 1; 30;
TextArea。SCROLLBARS_NONE);
TextArea t4 = new TextArea(〃t4〃; 10; 10;
TextArea。SCROLLBARS_VERTICAL_ONLY);
TextArea t5 = new TextArea(〃t5〃; 4; 30;
TextArea。SCROLLBARS_HORIZONTAL_ONLY);
TextArea t6 = new TextArea(〃t6〃; 10; 10;
418
…………………………………………………………Page 420……………………………………………………………
TextArea。SCROLLBARS_BOTH);
public void init() {
b1。addActionListener(new B1L());
add(b1);
add(t1);
b2。addActionListener(new B2L());
add(b2);
add(t2);
b3。addActionListener(new B3L());
add(b3);
b4。addActionListener(new B4L());
add(b4);
add(t3); add(t4); add(t5); add(t6);
}
class B1L implements ActionListener {
public void actionPerformed(ActionEvent e) {
t5。append(t1。getText() + 〃n〃);
}
}
class B2L implements ActionListener {
public void actionPerformed(ActionEvent e) {
t2。setText(〃Inserted by Button 2〃);
t2。append(〃: 〃 + t1。getText());
t5。append(t2。getText() + 〃n〃);
}
}
class B3L implements ActionListener {
public void actionPerformed(ActionEvent e) {
String s = 〃 Replacement 〃;
t2。replaceRange(s; 3; 3 + s。length());
}
}
class B4L implements ActionListener {
public void actionPerformed(ActionEvent e) {
t2。insert(〃 Inserted 〃; 10);
}
}
public static void main(String'' args) {
TextAreaNew applet = new TextAreaNew();
Frame aFrame = new Frame(〃TextAreaNew〃);
aFrame。addWindowListener(
new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System。exit(0);
}
});
aFrame。add(applet; BorderLayout。CENTER);
aFrame。setSize(300;725);
applet。init();
applet。start();
aFrame。setVisible(true);
}
419
…………………………………………………………Page 421……………………………………………………………
} ///:~
我们发现只能在构造TextArea 时能够控制滚动条。同样,即使TE AR 没有滚动条,我们滚动光标也将被制止
(可通过运行这个例子中验证这种行为)。
3。 复选框和单选钮
正如早先指出的那样,复选框和单选钮都是同一个类建立的。单选钮和复选框略有不同,它是复选框安置到
CheckboxGroup 中构成的。在其中任一种情况下,有趣的ItemEvent 事件为我们创建一个 ItemListener项目
接收器。
当处理一组复选框或者单选钮时,我们有一个不错的选择。我们可以创建一个新的内部类去为每个复选框处
理事件,或者创建一个内部类判断哪个复选框被单击并注册一个内部类单独的对象为每个复选对象。下面的
例子演示了两种方法:
//: RadioCheckNew。java
// Radio buttons and Check Boxes in Java 1。1
import java。awt。*;
import java。awt。event。*;
import java。applet。*;
public class RadioCheckNew extends Applet {
TextField t = new TextField(30);
Checkbox'' cb = {
new Checkbox(〃Check Box 1〃);
new Checkbox(〃Check Box 2〃);
new Checkbox(〃Check Box 3〃) };
CheckboxGroup g = new CheckboxGroup();
Checkbox
cb4 = new Checkbox(〃four〃; g; false);
cb5 = new Checkbox(〃five〃; g; true);
cb6 = new Checkbox(〃six〃; g; false);
public void init() {
t。setEditable(false);
add(t);
ILCheck il = new ILCheck();
for(int i = 0; i 《 cb。length; i++) {
cb'i'。addItemListener(il);
add(cb'i');
}
cb4。addItemListener(new IL4());
cb5。addItemListener(new IL5());
cb6。addItemListener(new IL6());
add(cb4); add(cb5); add(cb6);
}
// Checking the source:
class ILCheck implements ItemListener {
public void itemStateChanged (ItemEvent e) {
for(int i = 0; i 《 cb。length; i++) {
if(e。getSource()。equals(cb'i')) {
t。setText(〃Check box 〃 + (i + 1));
return;
}
}
420
…………………………………………………………Page 422……………………………………………………………
}
}
// vs。 an individual class for each item:
class IL4 implements ItemListener {
public void itemStateChanged(ItemEvent e) {
t。setText(〃Radio button four〃);
}
}
class IL5 implements ItemListener {
public void itemStateChanged(ItemEvent e) {
t。setText(〃Radio button five〃);
}
}
class IL6 implements ItemListener {
public void itemStateChanged(ItemEvent e) {
t。setText(〃Radio button six〃);
}
}
public static void main(String'' args) {
RadioCheckNew applet = new RadioCheckNew();
Frame aFrame = new Frame(〃RadioCheckNew〃);
aFrame。addWindowListener(
new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System。exit(0);
}
});
aFrame。add(applet; BorderLayout。CENTER);
aFrame。setSize(300;200);
applet。init();
applet。start();
aFrame。setVisible(true);
}
} ///:~
ILCheck拥有当我们增加或者减少复选框时自动调整的优点。当然,我们对单选钮使用这种方法也同样的
好。但是,它仅当我们的逻辑足以普遍的支持这种方法时才会被使用。如果声明一个确定的信号——我们将
重复利用独立的接收器类,否则我们将结束一串条件语句。
4。 下拉列表
下拉列表在 Java 1。1 版中当一个选择被改变时同样使用 ItemListener去告知我们:
//: ChoiceNew。java
// Drop…down lists with Java 1。1
import java。awt。*;
import java。awt。event。*;
import java。applet。*;
public class ChoiceNew extends Applet {
String'' description = { 〃Ebullient〃; 〃Obtuse〃;
〃Recalcitrant〃; 〃Brilliant〃; 〃Somnescent〃;
〃Timorous〃; 〃Florid〃; 〃Putrescent〃 };
421
…………………………………………………………Page 423……………………………………………………………
TextField t = new TextField(100);
Choice c = new Choice();
Button b = new Button(〃Add items〃);
int count = 0;
public void init() {
t。setEditable(false);
for(int i = 0; i 《 4; i++)
c。addItem(description'count++');
add(t);
add(c);
add(b);
c。addItemListener(new CL());
b。addActionListener(new BL());
}
class CL implements ItemListener {
public void itemStateChanged(ItemEvent e) {
t。setText(〃index: 〃 + c。getSelectedIndex()
+ 〃 〃 + e。toString());
}
}
class BL implements ActionListener {
public void actionPerformed(ActionEvent e) {
if(count 《 description。length)
c。addItem(description'count++');
}
}
public static void main(String'' args) {
ChoiceNew applet = new ChoiceNew();
Frame aFrame = new Frame(〃Choi