C.采用GridLayout布局,容器中的构件按照从左到右、从上到下的顺序排列 D.采用GridLayout布局,容器大小改变时,每个构件不再平均分配容器空间 【解析】采用GridLayout布局,容器大小改变时,每个构件平均分配容器空间。 7.当单击鼠标或拖动鼠标时,触发的事件是( D )。
A.KeyEvent B.ActionEvent C.ItemEvent D.MouseEvent 【解析】对鼠标操作,触发的事件是MouseEvent事件。 8.下列哪一项不属于Swing的顶层组件( C )?
A.JApplet B.JDialog C.JTree D.Jframe 【解析】JTree 只有在容器中才能显示,它不属于swing的顶层组件。 9.下列说法中错误的一项是( D )。
A.在实际编程中,一般使用的是Component类的子类 B.在实际编程中,一般使用的是Container类的子类 C.Container类是Component类的子类
D.容器中可以放置构件,但是不能够放置容器 【解析】容器中既可以放置构件,也可以放置容器。 10.下列哪一项不属于AWT布局管理器( D )?
A.GridLayout B.CardLayout C.BorderLayout D.BoxLayout 【解析】BoxLayout属于swing布局管理器,不属于AWT布局管理器。 11.下列说法中错误的一项是( A )。
A.MouseAdapter是鼠标运动适配器 B.WindowAdapter是窗口适配器 C.ContainerAdapter是容器适配器 D.KeyAdapter是键盘适配器
【解析】MouseAdapter是鼠标适配器,而MouseMotionAdapte才是鼠标运动适配器。 12.布局管理器可以管理构件的哪个属性( A )?
A.大小 B.颜色 C.名称 D.字体 【解析】布局管理器可以管理构件的位置和大小,而不能管理构件的其他属性。 13.编写AWT图形用户界面的时候,一定要import的语句是( B )。
A.import java.awt; B.import java.awt.*; C.import javax.awt D.import javax.swing.*; 【解析】“import java.awt.*;”语句的含义是加载awt包中的所有类,而其他都不是。 14.在类中若要处理ActionEvent事件,则该类需要实现的接口是( B )。
A.Runnable B.ActionListener C.Serializable D.Event
【解析】处理ActionEvent事件的类需要实现的接口是ActionListener,它其中包含了actionPerformed()方法。
15.下列不属于java.awt包中的基本概念的一项是( C )。
A.容器 B.构件 C.线程 D.布局管理器 【解析】线程不属于java.awt包中的基本概念的一项,其他三个都是。 16.下列关于AWT构件的说法中错误的一项是( D )。
A.Frame是顶级窗口,它无法直接监听键盘输入事件 B.对话框需要依赖于其他窗口而存在 C.菜单只能被添加到菜单栏中
D.可以将菜单添加到任意容器的某处
【解析】菜单只能添加到Applet、Frame等容器中,不能添加到任意容器的某处。 17.JPanel的默认布局管理器是( C )。
A.BorderLayout B.GridLayout C.FlowLayout D.CardLayout
【解析】Panel、JPanel和Applet的默认布局管理器都是FlowLayout。 18.下列说法中错误的是( B )。
A.在Windows系统下,Frame窗口是有标题、边框的 B.Frame的对象实例化后,没有大小,但是可以看到 C.通过调用Frame的setSize()方法来设定窗口的大小
D.通过调用Frame的setVisible(true)方法来设置窗口为可见
【解析】Frame的对象实例化后,没有大小,也不能看到,只有通过调用Frame的setSize()和setVisible(true)方法才能设定窗口的大小和可见性。 19.下列说法中错误的是( D )。
A.同一个对象可以监听一个事件源上多个不同的事件 B.一个类可以实现多个监听器接口
C.一个类中可以同时出现事件源和事件处理者 D.一个类只能实现一个监听器接口
【解析】一个类可以实现多个监听器接口,从而实现对多个事件的监听。 20.下列选项中不属于容器的一项是( )。
A.Window B.Panel C.FlowLayout D.ScrollPane 【解析】FlowLayout类属于布局管理器,而不属于容器。
二、编程题
1.创建一个Frame类型窗口,在窗口中添加2个不同颜色的Panel面板,每个面板中添加2个按钮构件。
【编程分析】本程序主要考察窗口、面板以及按钮的创建及布局问题。
第一步:首先定义一个主类,让该类继承Frame类。 第二步:定义该类的数据成员,包括两个Panel对象,一个长度为4的Button对象数组。 第三步:创建类的工作方法,在方法中创建各个对象、设置对象属性、布局整个界面、设置窗口大小并显示界面。
第四步:在类的main()方法中创建本类对象,从而显示整个窗口界面。 【参考程序】
import java.io.*; import java.awt.*;
public class X10_3_1 extends Frame{ Panel pn1,pn2; // 定义面板
Button[] bt = new Button[4]; // 定义按钮数组
public static void main(String[] args)throws IOException{ new X10_3_1 (); } public X10_3_1 (){
pn1 = new Panel(); // 创建面板对象 pn2 = new Panel();
pn1.setBackground(Color.yellow); // 设置面板背景颜色 pn2.setBackground(Color.green); for(int i=0; i<4; i++){ // 创建按钮对象 bt[i] = new Button(\}
pn1.add(bt[0]); // 向面板中添加按钮,面板的默认布局为FlowLayout pn1.add(bt[1]); pn2.add(bt[2]); pn2.add(bt[3]);
add(pn1,BorderLayout.NORTH);
// 向窗口添加面板,窗口默认布局为BorderLayout
add(pn2,BorderLayout.SOUTH);
this.setSize(300,200); // 设置窗口大小 this.setVisible(true); // 显示窗口
} }
【运行结果】
2.创建一个Frame类型窗口,采用GridLayout布局,在窗口中创建一个计算器的界面。 【编程分析】本程序主要考察布局管理问题。
第一步:创建一个主类,其中定义两个面板,一个文本框,一个二维按钮数组,一个二维字符串数组。一个构造方法、一个main()方法。
第二步:在构造方法中创建控件,实现布局。 【参考程序】
import java.io.*; import java.awt.*;
public class X10_3_2 extends Frame{ Panel pn1,pn2; // 定义两个面板 TextField tf; // 定义文本框控件
Button[][] bt = new Button[4][6]; // 定义按钮对象二维数组
String[][] str = {{\
{\/x\
public static void main(String[] args)throws IOException{ new X10_3_2(); } public X10_3_2(){ pn1 = new Panel(); // 创建面板 pn2 = new Panel(); tf = new TextField(35); // 创建文本框 pn1.add(tf);
}
}
pn2.setLayout(new GridLayout(4,6)); // 设置pn2面板的布局 for(int i=0; i<4; i++){ // 创建24个按钮控件并添加到pn2面板中 for(int j=0; j<6; j++){ bt[i][j] = new Button(str[i][j]); pn2.add(bt[i][j]); } }
add(pn1,BorderLayout.NORTH); // 将pn1面板添加到窗口北面 add(pn2,BorderLayout.CENTER); //将pn2面板添加到窗口中间 this.setTitle(\// 设置窗口标题 this.setSize(300,250); // 设置窗口大小 this.setVisible(true); // 显示窗口
【运行结果】
3.创建两个Frame类型窗口,在第一个窗口中添加一个按钮,当单击按钮时打开第二个窗口,当单击两个窗口中的关闭按钮时能关闭窗口。
【编程分析】本程序主要考察窗口事件、按钮事件的实现方法。
第一步:定义一个能创建两个窗口的类TwoFrames,由于该类中的两个窗口能够关闭,并且对点击按钮有响应,因此让该类继承WindowAdapter类,并实现ActionListener接口。在类中创建两个窗口,并在第一个窗口中添加一个按钮控件;重新定义继承自WindowAdapter类的方法windowClosing(),实现关闭窗口的目的,实现ActionListener接口中的方法actionPerformed(),从而实现点击按钮时打开第二个窗口。
第二步:在主类中的main()方法中创建类TwoFrames的对象。 【参考程序】
import java.awt.*;
import java.awt.event.*;
public class X10_3_3 { // 定义主类 public static void main(String[] args) { new TwoFrames();
} }
class TwoFrames extends WindowAdapter implements ActionListener{ // 定义窗口类 Frame fr1, fr2; // 定义两个窗口 Button bt; // 定义按钮 TwoFrames(){ // 构造方法 fr1 = new Frame(\ fr2 = new Frame(\ bt = new Button(\ bt.addActionListener(this); fr1.add(bt, BorderLayout.NORTH); fr1.addWindowListener(this ); fr2.addWindowListener(this ); fr1.setSize(200, 150); fr2.setSize(200,150); fr1.setVisible(true); }
public void actionPerformed(ActionEvent e){ // 处理点击按钮事件 if(e.getSource() == bt){ fr2.setVisible(true); } }
public void windowClosing(WindowEvent e){ System.exit(0); } }
【运行结果】
// 处理关闭窗口操作
4.编写一个能在窗口中同时响应鼠标事件和键盘事件的程序,能对鼠标的各种动作进行监听,对键盘的输入做出相应的反应。
【编程分析】本程序主要考察对鼠标、键盘事件的处理问题。
第一步:定义一个MouseKeyFrame类,该类主要有三个功能,(1)创建窗口。(2)处理鼠标事件。(3)处理键盘事件。创建窗口主要在类的构造方法中实现;处理鼠标事件主要在内部类MouseHandler中实现,该类实现了MouseListener和MouseMotionListener两个接口;处理键盘事件主要在内部类KeyHandler中实现,该类继承了Canvas类,实现了 KeyListener接口。Canvas类对象是接受键盘事件的容器,KeyListener接口中包含了处理键盘