第一节 第二节 第三节 第四节 第五节 第六节 第七节 第八节 第九节 第十节 第十一节
第五节    标签与按钮
1 按钮(Button)
当用户用鼠标单击按钮时,会激活一个事件。按钮由Button类创建,而Button类是由Component类直接扩展的。表10.1列出了Button类的构造函数及常用方法。
表12.1Button类的构造函数及常用方法。

构造函数

说明

public Button()

创建一个无标签按钮

public Button(String label)

创建一个有标签按钮

常用方法

说明

public String getLabel()

获取按钮标签

public void setLabel(String label)

设置按钮标签


按钮表面上显示的文字称为按钮标签。一个GUI可以包含多个按钮,但每个按钮的标签必须是唯一是,多个按钮具有相同的标签是一个逻辑错误,这样的会使用户产生混淆。
例12.1的程序创建3个按钮,并将它们添加到applet中。其中两个按钮带有按钮标签。下面的语句用于创建3个Button引用:
private button button1,button2,button3;
每个Button引用都通过new和一个Button构造函数来实例化。下面语句分别对Button1、Button2和Button3进行实例化:
button1 = new Button("Click here");
button2 = new Button("Sorry, I do nothing");
button3 = new Button();
构造函数Button中的字符串参数就是按钮标签,其中对象Button3没有标签。
要想使各对象可见,必须使用add方法将它们添加到一个容器中。前面已经介绍过,容器是用于放置多个组件的一个区域,本章主要使用的容器是applet和Frame。使用Container类的add方法可以将组件安置到容器上。下面的语句实现将创建的三个按钮组件安置到applet中:
add(button1);
add(button2);
add(button3);
[b]【例12[/b][b].1[/b][b]】[/b]
//Fig. 10.4: MyButtons.java
//Creating buttons.
import java.applet.Applet;
import java.awt.*;

public class MyButtons extends Applet{
private Button button1,button2,button3;
public void init()
{
button1=new Button("Click here");
button2=new Button("Sorry, I do nothing");
button3=new Button();
//add buttons
add(button1);
add(button2);
add(button3);
}
}
先将上述程序保存为MyButtons.java文件,再编译生成MyButtons.class文件,然后建立一个如下内容的网页文件test.html,将该html文件与MyButtons.class文件放在相同的目录下:
图形界面测试
用浏览器打开该html文件,或者使用Java的小程序查看器appletviewer,即键入如下命令:
appletviewer test.html
程序运行的结果如图12.1所示。

图12.1 创建3个按钮

2 标签(Label)
标签在GUI中主要用来显示不可编辑的文本。标签使用Label类来创建,而Label类是从Component类直接扩展而来的。像其他对象一样,标签对象也必须通过调用构造函数来创建。表10.2列出了Label类的构造函数及常用方法。
表12.2 Label类的构造函数及常用方法

构造函数

说明

public Label()

创建一个不显示任何文本的标签

public Label(String text)

创建一个标签,标签上显示字符串text

public Label(String text,int align)

用指定的文本及对齐方式创建一个标签,align可能的取值:Label.LEFT,Label.RIGHT或Label.CENTER,默认的对齐方式为左对齐

常用方法

说明

public String getText()

返回标签文本

public int getAlignment()

返回标签对齐方式

Public void setText(String text)

设置标签文本

Public void setAlignment(int align)

设置标签对齐方式


例12.2创建了两个标签,并将它们加入到applet中,其中用到了表10.2的两个构造函数。
[b]【例12[/b][b].2[/b][b]】[/b]
//Fig. 10.5: MyLabel.java
//Demonstrating the Label class constructors
import java.applet.Applet;
import java.awt.*;
public class MyLabel extends Applet{
private Label label1,label2;
public void init()
{
//create a Label without text
label1=new Label();
//create a Label with a string argument
label2=new Label("Label with text");
//add labels to applet
add(label1);
add(label2);
}
}
程序的运行结果如图12.2所示。

图12.2 创建标签示例

Label对象通过Label类及一个Label构造函数创建。下面的语句是使用Label类创建两个标签引用:
private Label label1,label2;
对象label1使用下面的语句进行创建:
label1=new Label();
这个标签上未显示任何文本。一般情况下,对于在初始时刻不必显示任何文本的标签通常使用这种类型的标签对象,不过,在后面程序中,仍然可以在该标签上显示信息。在下面的例子(图10.6)中,我们将介绍如何为这种类型的标签设置文本。
标签对象label2通过下面语句创建:
label2=new Label("Label with text");
在这个标签上显示文本字符串“Label with text”。
例12.3的程序创建一个未显示任何文本的Label对象,然后使用setText方法为该标签设置文本。getText方法用于获取该标签的文本,并显示在状态栏中。
[b]【例12[/b][b].3[/b][b]】[/b]
//Fig. 10.6: MyLabel2.java
//Demonstrating Label class getText and setText methods.
import java.applet.Applet;
import java.awt.*;
public class MyLabel2 extends Applet{
private Label label1;
public void init()
{
label1=new Label();
//set text in label1
label1.setText("new text");
//add label component
add(label1);
}
public void paint(Graphics g)
{
//get label1's text
showStatus("Label is displaying: " + label1.getText());
}
}
运行结果如图12.3。

图12.3 使用getText和setText方法的示例

开始时,对象label1不包含任何文本,然后,将标签上要显示的文本字符串作为参数传递给setText方法。如下列程序行所示:
label1.setText("new text");
下面这条语句的功能是在状态栏上显示label的文本:
showStatus("Label is displaying: " + label1.getText());
getText方法用于获取label的文本。该语句放在paint方法中,因此showStatus方法就可以在applet初始化之后显示label的文本。如果这个语句放在init方法中,那么由showStatus方法显示的信息就会由“小程序已启动。”所覆盖。