一、按钮:
/**
*
按钮(Button)是JAVA图形用户界面的基本组件之一,它有两个构造方法:
* public Button()
* public Button(String lable)
*
其中第一种方法构造一个不带标签的按钮,第二种方法构造一个带标签的按钮。
*
当用户用鼠标单击按钮时,AWT事件处理系统将向按钮发送一个ActionEvent事件对象。如果应用程序需要对此作出反应,那么就
需要为注册事件监听程序并实现ActionListener接口。
* 下面的程序是一个使用按钮的例子。
* @author ifwater
*/
import java.awt.*;
import java.awt.event.*;
class ButtonExample extends WindowAdapter implements
ActionListener{
//定义基本组件
Frame
f;
Button
b;
TextField
tf;
int
tag=0;
//初始化按钮组件
public
static void main(String args[]) {
ButtonExample be=new ButtonExample();
be.go();
}
public
void go(){
//初始化其他组件,并且通过ActionListener()方法为按钮注册监听程序
f=new
Frame("Button Example");
b=new
Button("Sample");
b.addActionListener(this);
f.add(tf,"South");
tf=new
TextField();
f.add(tf,"Center");
f.addWindowListener(this);
f.setSize(300,500);
f.setVisible(true);
}
//实现ActionListener接口中的actionPerformed()方法
public void
actionPerformed(ActionEvent e){
String s1="You hava Pressed the Button";
String s2="You do another time";
if(tag==0){
tf.setText(s1);
tag=1;
}else
{
tf.setText(s2);
tag=0;
}
}
public
void windowClosing(WindowEvent e){
System.exit(0);
}
}
二、复选框
/**
*
复选框(Checkbox)是一个带标签的小方框,具有“开”和“关”两种状态
*
用户对复选框的操作将引发ItemEvent事件,该事件需要由实现ItemEvent接口的类的处理
*
在ItemEvent类中定义了getStateChange()方法,通过该方法可以判断用户对复选框所执行的操作是“开”还是“关”,其返回值为常
量Item.DESELECTED或Item.SELECTED
*
ItemEvent类中还定义了getItem()方法,该方法返回值为一字符串,表示用户操作所涉及的复选框的标签内容
* 复选框的有三种基本的构造方法:
* (1)public Checkbox()
构造一个不带标签、初始状态为“关”的复选框
* (2)public Checkbox(String
label)构造一个带标签、初始状态为“关”的复选框
* (3)public Checkbox(String label,boolean
state)构造一个带标签,其初始状态由boolean型变量state决定
* @author ifwater
*/
import java.awt.*;
import java.awt.event.*;
class CheckboxExample extends WindowAdapter implements
ItemListener{
//定义一个框架f、面板p、复选框one、复选框two、复选框three和文本框TextField
Frame
f;
Panel
p;
Checkbox
one,two,three;
TextField
tf;
public
static void main(String args[]){
//创建一个CheckboxExample类ce,它的方法为go()
CheckboxExample ce = CheckboxExample();
ce.go();
}
public void go(){
//前面对f和p进行了定义,现在通过new对其进行初始化
f = new Frame("Checkbox Example");
p = new Panel();
//通过初始化,创建三个复选框
one = new Checkbox("one");
two = new Checkbox("two");
three = new Checkbox("three");
//对三个复选框注册事件监听程序
one.addItemListener(this);
two.addItemListener(this);
three.addItemListener(this);
//使用add方法,将三个复选框加到f和p对象中
p.add(one);
p.add(two);
p.add(three);
f.add(tf,"South");
//注册事件监听程序,设定窗口f的大小,并把f以及它包含的组件显示出来对用户可见
f.addWindowListener(this);
f.setSize(300, 500);
f.setVisible(true);
}
//实现ItemListener接口中的itemStateChanged()方法
public void
itemStateChanged(ItemEvent e){
String state = "deselected";
String st;
if(e.getStateChange() ==
ItemEvent.SELECTED){
state = "selected";
}
st = e.getItem() + " " + state;
tf.setText(st);
}
//覆盖WindowAdapter类中的windowClosing()方法
public void
windowClosing(WindowEvent e){
//结束程序运行
System.exit(0);
}
}
三、单选框
/**
* 单选按钮时复选框组中特殊的构造方法:
* (1) public Checkbox(String label,boolean
state,CheckboxGroup group)
* (2) public Checkbox(String label,CheckboxGroup
group,boolean state)
*
在这两种构造方法中均使用了CheckboxGroup类型的参数,通过这两种构造方法,可以创建出多个从属于同一个复选框组
(CheckboxGroup group)的、带标签的复选框
* 复选框的初始状态有boolean型变量state指定
* @author ifwater
*/
import java.awt.*;
import java.awt.event.*;
class CheckboxGroupExample extends WindowAdapter implements
ItemListener{
//各个框架的定义
Frame
f;
Panel
p;
CheckboxGroup cbg;
Checkbox
one,two,three;
TextField
tf;
public
static void main(String args[]){
CheckboxGroupExample ce = new CheckboxGroupExample();
ce.go();
}
public void
go(){
//通过对已经定义的f、g进行初始化,创建f、g
f = new
Frame("CheckboxGroup Example");
p = new
Panel();
//通过对已经定义复选框进行初始化,创建三个从属于同一个组的复选框
cbg = new
CheckboxGroup();
one = new
Checkbox("One",cbg,false);
two = new
Checkbox("Two",cbg,false);
three = new
Checkbox("Three",cbg,true);
//注册事件监听程序
one.addItemListener(this);
two.addItemListener(this);
three.addItemListener(this);
p.add(one);
p.add(two);
p.add(three);
f.add(tf,"South");
//注册事件监听程序
f.addWindowListener(this);
f.setSize(300,500);
f.setVisible(true);
}
//实现ItemListener接口中的itemStateChanged()方法
public void
itemStateChanged(ItemEvent e){
String st;
st = e.getItem() + "selected";
tf.setText(st);
}
//覆盖WindowAdapter类中的windowClosing()方法
public void
windowClosing(WindowEvent e){
System.exit(0);
}
}
四、选择框
/**
*
选择框(Choice)是一个下拉式菜单,其构造方法为:public Choice()
*刚刚构造出来的选择框中并没有实际内容,需要使用addItem()方法为其添加新的选择项
* @author ifwater
*/
import java.awt.*;
class ChoiceExample{
Frame
f;
Choice
c;
Label l;
public
static void main(String arg[]){
ChoiceExample ce = new ChoiceExample();
ce.go();
}
void
go(){
f = new
Frame();
f.setLayout(new FlowLayout());
l =new
Label("your choice:");
f.add(l);
c = new
Choice();
c.addItem("First");
c.addItem("Second");
c.addItem("Third");
f.add(c);
f.setSize(250,160);
f.setVisible(true);
}
}
五、画布
/**
*
画布(Canvas)是一块空白区域,可用于绘画、输出文本信息或者接收键盘和鼠标输入,其构造方法为:
* public Canvas()
*
画布可对各类事件进行监听,通常需要在程序中实现KeyListener,MouseMotionListener和MouseListener等接口,以便使画布能
够对用户的输入作出响应
*
为了在画布中接收键盘事件,必须调用Canvas类的requestFocus()方法,否则,画布有可能接收不到属于它的键盘事件;那些键
盘事件可能被其他组件接收,也可能全部丢失
*
下面的程序创建了一个画布并实现了KeyListener和MouseListener接口
* @author ifwater
*/
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class MyCanvas implements
KeyListener,MouseListener{
Canvas
c;
String
s="";
TextField
t;
public
static void main(String args[]){
Frame f = new Frame("Canvas");
MyCanvas mc = new MyCanvas();
mc.c = new Canvas();
mc.t = new TextField();
f.add("South",mc,t);
f.add("Center",mc,c);
f.setSize(300.500);
mc.c.addMouseListener(mc);
mc.c.addKeyListener(mc);
f.setVisible(true);
}
//实现KeyListener接口中的方法
public void
keyTyped(KeyEvent ev){
t.setText("keyTyped");
s += ev.getKeyChar();
//将用户键入的字符写到画布上
c.getGraphics().drawString(s,0,20);
}
public void
keyPressed(KeyEvent ev){ }
public void
keyReleased(KeyEvent ev){
t.setText("keyReleased");
}
//实现MouseListener接口中的方法
public void MouseClicked(MouseEvent ev){
t.setText("mouseClicked");
//强制画布获取输入焦点
c.requestFocus();
}
public void MousePressed(MouseEvent ev){
t.setText("mousePressed");
}
public void MouseEntered(MouseEvent ev){
t.setText("MouseEntered");
}
public void MouseExited(MouseEvent ev){
t.setText("MouseExited");
}
}
六、标签
/**
*
标签(Label)对象通常只用于显示提示性的文本信息,其构造方法有三种形式:
* (1) public Label() 构造一个空标签
* (2) public Label(String text)
构造一个以左对齐方式显示指定字符串的标签
* (3) public Label(String text,int alignment)
构造一个显示指定字符串的标签,字符串对齐方式由int型参数alignment指定
(其值可为Label.LEFT,Label.RIGHT和Label.CENTER;分别为左对齐、右对齐和居中)
* 在程序中,可以使用setText(String
text)方法修改显示在标签上的字符串,但是在程序运行过程中,用户不能对标签内容进行
修改
* @author ifwater
*
*/
import java.awt.*;
public class LabelExample {
static public void main(String[]args){
Frame f;
Label l1,l2,l3;
f = new Frame("Label
Example");
f.setLayout(new
GridLayout(3,1,30,30));
l1 = new Label("Hello,this is
Label1");
l2 = new Label("Hello,this is
Label2");
l3 = new Label("Hello,this is
Label3");
f.add(l1);
f.add(l2);
f.add(l3);
f.setSize(300, 200);
f.setVisible(true); }
}
七、文本域
文本域(TextField)是一个单行的文本输入框,它有四种构造方法:
(1) public TextField() 构造一个空文本域
(2) public TextField(String text)
构造一个显示指定字符串的文本域,String型参数text指定要显示的初始字符串
(3) public TextField(int columns)
构造一个具有指定列数的空文本域,int型参数指定文本域的列数
(4) public TextField(String text,int columns)
构造一个具有指定列数、显示指定初始字符串的文本域,String型参数text指
定要显示的初始字符串,int型参数指定文本域的列数
由于在文本域中只允许输入一行文本内容,因此当用户按Enter或Return键时,将会引发ActionEvent事件,对此,可用实现了
ActionListener接口的类通过actionPerformed()方法进行处理。除此之外,也可以根据需要为文本域注册其他事件监听程序
八、文本区
/**
*
文本区(TextArea)是一个多行多列的文本输入框,它有五种构造方法:
* (1) public TextArea()
构造一个有水平和垂直滚动杠的空文本区
* (2) public TextArea(String text)
构造一个有水平和垂直滚动杠并显示初始文本内容的文本区
* (3) public TextArea(int rows,int columns)
构造一个有水平和垂直滚动杠并具有指定行数和列数的文本区
* (4) public TextArea(String text,int rows,int
columns)
构造一个有水平和垂直滚动杠、具有指定行数和列数并显示初始文
本内容的文本区
* (5) public TextArea(String text,int rows,int
columns,int scrollbars)
构造一个具有指定行数、列数及滚动杆并显示初始
文本内容的文本区
*
其中,String型参数指定要显示的初始文本的内通;int型参数rows和columns分别指定文本区行数和列数,int型参数scrollbars
指定要显示的滚动杆,它有四种可能的取值
* 1) SCROLLBARS_BOTH
同时显示水平和垂直滚动杆
* 2) SCROLLBARS_VERTICAL_ONLY
只显示垂直滚动杆
* 3) SCROLLBARS_HORIZONTAL_ONLY
只显示水平滚动杆
* 4) SCROLLBARS_NONE 两个滚动杆都不显示
*
可以使用setEditable(boolean)方法将文本区设置为不可编辑或可编辑的状态。
*
由于文本区中的可输入的文本是多行的,用户按Enter或Return键的结果只是向缓冲区输入一个字符,而不能表示输入结束
*
因此,输入完成时,通常要在文本区旁放置一个Apply或Commit之类的按钮
*
下面的程序创建了一个文本域和两个文本区,通过事件处理程序,用户在文本域和第一个文本区上进行操作所引发的事件名称会
显示在第二个文本区中
* @ author ifwater
*/
import java.awt.*;
import java.awt.*;
public class TextAreaExample implements
ActionListener,TextListener{
Frame
f;
TextField
tf1;
TextArea
ta1,ta2;
static
public void main(String args[]){
TextExample te = new TextExample();
te.go();
}
public
void go(){
f = new Frame("Text Example");
f.setLayout(new FlowLayout());
tf1 = new TextField("Init",20);
tf1.addActionListener(this);
tf1.addTextListener(this);
ta1 = new TextArea("Initial",4,30);
ta1.addTextListener(this);
ta2 = new TextArea("Only
horizontal",4,30,TextArea.SCROLLBARS_HORIZONTAL_ONLY);
f.add(tf1);
f.add(ta1);
f.add(ta2);
f.setSize(300,300);
f.setVisible(true);
}
public void
actionPerformed(ActionEvent e){
ta2.append("\nActionPerformed");
}
public void
TextValueChanged(TextEvent e){
ta2.append("\nTextValueChanged");
}
}
九、文本组件
虽然TextArea和TextField是两个不同的类,但是如果查阅名为TextComponet类的文档,就会发现这个类定义了很多TextArea类
和TextField类共有的方法,这是因为该类是TextArea和TextField两个类的父类。
在TextComponet类中定义的主要方法有:
(1)
getSelectedText() 从文本组件中提取被选中的文本内容
(2)
getText() 从文本组件中提取所有的内容
(3)
select(int,int) 在文本组件中选中部分的内容
(4)
selectAll() 在文本组件中选中所有内容
(5)
setEditable(boolean) 设置为可编辑或不可编辑状态
(6)
setText(String) 设置文本组件中的内容
十、列表
/**
*
列表(List)是可供用户进行选择的一系列可选项,它可支持单项选择和多项选择。列表有三种构造方法:
* (1) public List() 构造一个单选列表
* (2) public List(int rows)
构造一个显示指定项数的单选列表,其中int型参数指定要显示的项数
* (3) public List(int rows,boolean
multipleMode)构造一个显示指定项数的列表,其中int型参数指定要显示的项数,boolean
型参数指定该列表示单选(false)列表还是多选(true)列表
*
下面的程序构造了一个显示5个可选项的单选列表,通过ItemListener接口中的itemStateChanged()方法,用户的选择被显示在窗
口底部
* @author ifwater
*/
import java.awt.*;
import java.awt.*;
public class ListExample extends Frame implements
ItemListener{
Panel
p;
List
theList;
TextField
tf;
ListExample(String s){ super (s);}
public
static void main(String args[]){
ListExample le = new ListExample("List Example");
le.init();
}
void
init(){
//构造一个显示5个可选项的单选列表
theList = new List(5,false);
theList.add("Monday");
theList.add("Tuesday");
theList.add("Wednesday");
theList.add("Thursday");
theList.add("Friday");
theList.add("Saturday");
theList.add("Sunday");
//注册ItemEvent事件监听程序
theList.addItemListener(this);
p= new Panel();
p.add(theList);
add(p,"Center");
tf = new TextField();
add(tf,"South");
setSize(300,200);
setVisible(true);
}
//实现ItemListener接口中的方法
public void
itemStateChanged(ItemEvent e){
tf.setText(thisList.getSelectedItem());
}
}