1. 按钮(Button)
按钮是最常用的一个组件,其构造方法是:Button b = new Button("Quit");
当按钮被点击后,会产生ActionEvent事件,需ActionListener接口进行监听和处理事件。
ActionEvent的对象调用getActionCommand()方法可以得到按钮的标识名,缺省按钮名为label。
用setActionCommand()可以为按钮设置组件标识符。
2.复选框 (Checkbox)
复选框提供简单的"on/off"开关,旁边显示文本标签。
构造方法如下:
setLayout(new GridLayout(3,1));
add(new Checkbox("one",null,true));
add(new Checkbox("two"));
add(new Checkbox("three"));
复选框用ItemListener 来监听ItemEvent事件,当复选框状态改变时用getStateChange()获取当前状态。使用getItem()获得被修改复选框的字符串对象。
例5.13
class Handler implements ItemListener {
public void itemStateChanged(ItemEvent ev){
String state = "deselected";
if (ev.getStateChange() = = ItemEvent.SELECTED){
state = "selected"
}
System.out.println(ev.getItem()+" "+state);
}
}
3.复选框组(CheckboxGroup)使用复选框组,可以实现单选框的功能。方法如下:
setLayout(new GridLayout(3, 1));
CheckboxGroup cbg = new CheckboxGroup();
add(new Checkbox("one", cbg, true));
add(new Checkbox("two", cbg, false));
add(new Checkbox("three", cbg, false));
4. 下拉式菜单(Choice)下拉式菜单每次只能选择其中的一项,它能够节省显示空间,适用于大量选项。
Choice Colorchooser=new Choice();
Colorchooser.add("Green");
Colorchooser.add("Red");
Colorchooser.add("Blue");
Choice 用ItemListener接口来进行监听
5. Canvas
一个应用程序必须继承Canvas类才能获得有用的功能,比如创建一个自定义组件。如果想在画布上完成一些图形处理,则Canvas类中的paint()方法必须被重写。
Canvas组件监听各种鼠标,键盘事件。当在Canvas组件中输入字符时,必须先调用requestFocus()方法。
例5.14
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class MyCanvas implements KeyListener, MouseListener {
Canvas c; //声明一个画布对象
String s ="";
public static void main(String args[]) {
Frame f=new Frame("Canvas");
MyCanvas mc=new MyCanvas();
mc.c=new Canvas();
f.add("Center",mc.c);
f.setSize(150,150);
mc.c.addMouseListener(mc); //注册监听器
mc.c.addKeyListener(mc); //注册监听器
f.setVisible(true);
}
public void mouseClicked(MouseEvent ev){
System.out.println("MouseClicked");
c.requestFocus();//获得焦点,表示该窗口将接收用户的键盘和鼠标输入
}
public void keyTyped(KeyEvent ev) {
System.out.println("KeyTyped");
s+=ev.getKeyChar(); //获取每个输入的字符,依次添加到字符串s中
c.getGraphics().drawString(s,0,20); //显示字符串s
}
public void keyPressed(KeyEvent ev) { System.out.println("KeyPressed"); }
public void keyReleased(KeyEvent ev) { System.out.println("KeyReleased"); }
public void mousePressed(MouseEvent ev) {System.out.println("MousePressed"); }
public void mouseReleased(MouseEvent ev) {System.out.println("MouseReleased"); }
public void mouseEntered(MouseEvent ev) {System.out.println("MouseEntered"); }
public void mouseExited(MouseEvent ev) {System.out.println("MouseExited"); }
}
6. 单行文本输入区(TextField)只能显示一行,当回车键被按下时,会发生ActionEvent事件,可以通过ActionListener中的actionPerformed()方法对事件进行相应处理。可以使用setEditable(boolean)方法设置为只读属性。
单行文本输入区构造方法如下:
TextField tf1,tf2,tf3,tf4:
tf1=new TextField();
tf2=new TextField("",20); //显示区域为20列
tf3=new TextField("Hello!"); //按文本区域大小显示
tf4=new TextField("Hello!",30); //初始文本为Hello!, 显示区域为30列
7. 文本输入区(TextArea)TextArea可以显示多行多列的文本。使用setEditable(boolean)方法,可以将其设置为只读的。在TextArea中可以显示水平或垂直的滚动条。
要判断文本是否输入完毕,可以在TextArea旁边设置一个按钮,通过按钮点击产生的ActionEvent对输入的文本进行处理。
8. 列表(List)
列表中提供了多个文本选项,列表支持滚动条,可以浏览多项
List lst=new List(4,false); //两个参数分别表示显示的行数、是否允许多选
lst.add("Venus");
lst.add("Earth");
lst.add("JavaSoft");
lst.add("Mars");
cnt.add(lst);
9. 框架(Frame)
Frame是顶级窗口,可以显示标题,重置大小。当Frame被关闭,将产生WindowEvent事件,Frame无法直接监听键盘输入事件。
10. 对话框(Dialog)
它是Window类的子类。对话框和一般窗口的区别在于它依赖于其它窗口。对话框分为非模式(non-modal)和模式(modal)两种。
11. 文件对话框(Filedialog)
当用户想打开或存储文件时,使用文件对话框进行操作。主要代码如下:
FileDialog d=new FileDialog(ParentFr,"FileDialog");
d.setVisible(true);
String filename=d.getFile();
12. 菜单(Menu)
无法直接将菜单添加到容器的某一位置,也无法使用布局管理器对其加以控制。菜单只能被添加�"菜单容器"(MenuBar)中。
13. MenuBar
只能被添加到Frame对象中,作为整个菜单树的根基。
Frame fr = new Frame("MenuBar");
MenuBar mb = new MenuBar();
fr.setMenuBar(mb);
fr.setSize(150,100);
fr.setVisible(true);
14. Menu下拉菜单。它可以被添加到MenuBar中或其它Menu中。
Frame fr = new Frame("MenuBar");
MenuBar mb = new MenuBar();
fr.setMenuBar(mb);
Menu m1 = new Menu("File");
Menu m2 = new Menu("Edit");
Menu m3 = new Menu("Help");
mb.add(m1);
mb.add(m2);
mb.setHelpMenu(m3);
fr.setSize(200,200);
fr.setVisible(true);
15. MenuItemMenuItem是菜单树中的"叶子节点"。MenuItem通常被添加到一个Menu中。对于MenuItem对象可以添加ActionListener,使其能够完成相应的操作。
Menu m1 = new Menu("File");
MenuItem mi1 = new MenuItem("Save");
MenuItem mi2 = new MenuItem("Load");
MenuItem mi3 = new MenuItem("Quit");
m1.add(mi1);
m1.add(mi2);
m1.addSeparator();
m1.add(mi3);
MenuBar和Menu都没有必要注册监听器,只需要对MenuItem添加监听器ActionListener,完成相应操作。16. 组件与监听器的对应关系下表中列出了各个组件与所有的监听器的对应关系,打上"
"表明该组件可以注册此种监听器。
表5.2
监听器接口
Act
Adj
Cmp
Cnt
Foc
Itm
Key
Mou
MM
Text
Win
Button
Canvas
Checkbox
CheckboxMenuItem
Choice
Component
Container
Dialog
Frame
Label
List
MenuItem
Panel
Scrollbar
ScrollPane
TextArea
TextField
Window
Act=ActionListener Adj=AdjustmentListener Cmp=ComponentListener Cnt=ConatainerListener Foc=FocusListener Itm=ItemListener Key=KeyListener Mou=MouseListener MM=MouseMotionListener Text=TextListener Win=WindowListener