一、单项选择题
1. 以下组件中,属于顶层容器的是 【 】
A. JButton B. JLable C. JPanel D. JFrame
2. 以下组件中,属于容器的是 【 】
A. JButton B. JLable C. JPanel D. JCheckBox
3. 关于 JLabel 组件, 以下叙述正确的是 【 】
A. JLabel上只能有文本
B. JLabel上只能有图标
C. JLabel上或者有文本或者有图标
D. JLabel上既可以有文本又可以有图标
4. 在使用BorderLayout布局管理器的容器中,如加入组件没有指定位置,则默认加入到
【 】
A. “右”位置 B. “左”位置 C. “上”位置 D. “中”位置
5. 某 Java程序的类A要利用 Swing创建框架窗口,则A 需要继承的类是 【 】
A. JWindow B. JFrame C. JDialog D. JApplet
6. MouseMotionListener 接口能处理的鼠标事件是 【 】
A. 按下鼠标键 B. 鼠标单击 C. 鼠标进入 D. 鼠标移动
7. JPanel的默认布局管理器是 【 】
A. GridLayout B. FlowLayout C. CardLayout D. BorderLayout
8. 下面的方法中, 属于 MouseListener接口定义的是 【 】
A. mouseclick (MouseEvent) B. mousePress (MouseEvent)
C. mouseEntered (MouseEvent) D. mouseDragged (MouseEvent)
9. 以下术语中,属于文字基本样式属性的是 【 】
A. 颜色 B. 宋体 C. 斜体 D. 字号
10. 以下 Java 程序代码中, 能正确创建 Font对象的是 【 】
A. Fon t f l = new font( Font. PLAIN, 12, “宋体”);
B. Fon t f2 = new font( Font. PLAIN, "宋体", 12);
C. Fon t f3 = new font(12, "宋体", Font. PLAIN);
D. Font f4= new font("宋体", Font. PLAIN, 12);
11. 在Graphics2D类中, 用来确定填充效果的方法是 【 】
A. setPaint() B. setStroke() C. setTransform() D. setClip()
二、填空题
1. 不包含本地代码的 Swing组件被称为 轻量级组件。
2. 包含本地代码的 AWT组件被称为 重量级 组件。
3. 创建窗口用到的JFrame 和JButton类定义在 javax.swing 包中。
4. 负责安排组件显示方式的是 布局管理器 。
5. BorderLayout将所管理的容器划分为5个区域, 分别是 上下左右中。
6. 用户在程序界面所进行的操作是一个 用户事件 。
7. 要想处理某类用户事件,必须要为相应的组件注册事件侦听程序。
8. 要使得已注册的按钮对象暂时不响应事件,需要使用的方法是removeActionListener(ActionListener l)。
9. JScrollbar jb= new JScrollbar(JScrollbar. HORIZONTAL, 50, 8, 0, 300); 创建的滚动条对象能表示的最大值是 300。
10. 某应用程序中, 定义类 Cl 是JPanel 的子类, 在类 Cl 的对象中需要绘图, 则在 Cl 中应重写的方法是 paintComponent(Graphics g)方法 。
11. 在 Graphics类中,绘图模式主要有正常模式和 异或模式两种。
三、简答题
1. Java中提供了几种布局管理器? 简述它们之间的区别。
答:Java中的Swing库提供了多种布局管理器(LayoutManager),用于控制容器内组件的位置和大小。这些布局管理器帮助开发者在不同的平台上创建具有统一外观的应用程序界面。下面是Java中常用的几种布局管理器及其简要说明:
1. FlowLayout
特点:将组件水平放置在容器中,从左到右排列。当一行放不下时,换到下一行继续放置。
适用场景:适用于简单的界面布局,如工具栏或简单的对话框。
控制方式:不提供组件大小的控制,由容器自动调整组件大小。
2. BorderLayout
特点:将容器分为五个区域:北(North)、南(South)、东(East)、西(West)和中心(Center)。每个区域只能放置一个组件,但可以通过嵌套容器来放置多个组件。
适用场景:适用于需要固定位置的布局,如主窗口的布局。
控制方式:默认情况下,中心区域占据大部分空间,其他四个区域占据固定大小的空间。
3. GridLayout
特点:将容器划分为均匀大小的网格,每个网格可以放置一个组件。
适用场景:适用于需要等分布局的情况,如表格或网格状布局。
控制方式:网格大小由容器的大小和网格数量决定。
4. GridBagLayout
特点:提供了非常灵活的布局方式,可以精确控制每个组件的位置和大小。
适用场景:适用于需要复杂布局的情况,如多行多列的表格布局。
控制方式:通过 GridBagConstraints 对象来控制每个组件的位置、大小、对齐方式等。
5. BoxLayout
特点:提供了基于盒模型的布局方式,可以创建垂直或水平的盒子来组织组件。
适用场景:适用于需要按照一定的顺序排列组件的情况,如垂直或水平的列表布局。
控制方式:通过 BoxLayout.X_AXIS 或 BoxLayout.Y_AXIS 来指定布局方向,并自动调整组件大小。
6. CardLayout
特点:允许在一个容器中放置多个组件,并且只能显示其中一个。通过 next()、previous()、show() 等方法来切换显示的组件。
适用场景:适用于需要切换不同视图的情况,如多页布局或幻灯片展示。
控制方式:通过命名或索引来标识不同的组件,并通过 CardLayout 控制显示哪一个组件。
- BorderLayout布局管理器是如何安排组件的?
答:BorderLayout 布局管理器是Java Swing中最常用的布局管理器之一,它将容器划分为五个区域:北(North)、南(South)、东(East)、西(West)和中心(Center)。这些区域用于放置组件,并且每个区域可以放置一个组件。如果试图在同一区域内放置多个组件,只有最后一个放置的组件会被显示。
- 如果想以上、中、下的位置安排3个按钮,可以使用哪些布局管理器?
答:1. BorderLayout、2. BoxLayout、GridBagLayout
- Frame和 Panel默认的布局管理器分别是什么类型?
答:JFrame 的默认布局管理器是 BorderLayout。
JPanel 的默认布局管理器是 FlowLayout
- 什么是事件? 事件是怎样产生的?
答:事件通常指的是由用户或系统触发的动作或状态变更。事件可以是用户通过鼠标点击或键盘输入与程序交互的行为,也可以是系统定时器到期或网络连接建立等系统级的活动。
事件的产生通常涉及以下几个步骤:
事件源(Event Source):事件发生的来源。例如,按钮是一个事件源,当用户点击按钮时,会产生一个点击事件。
事件(Event):描述了事件源上发生的动作或状态变化的信息。例如,当用户点击按钮时,会产生一个 MouseEvent 对象,其中包含有关点击的信息,如点击的位置、时间戳等。
事件监听器(Event Listener):注册到事件源上的对象,用于接收事件并处理。事件监听器通常是一个实现了特定接口的类,该接口定义了处理事件的方法。例如,处理点击事件的接口可能是 ActionListener,它定义了 actionPerformed(ActionEvent) 方法。
事件处理:当事件发生时,事件监听器会收到事件通知,并调用相应的方法来处理事件。例如,当点击事件发生时,事件监听器会调用 actionPerformed(ActionEvent) 方法。
- 在API文档中查找 Event类, 解释其中 target、when、id、x、y 和 arg分别表示什么内容?
答:AWTEvent 类
AWTEvent 类是所有AWT事件的父类,它提供了一些基本的属性和方法来描述事件的基本信息。以下是与你提到的属性相关的解释:
target:
注意:target 并不是 AWTEvent 类中的一个属性。在 AWTEvent 中,对应的属性是 source,表示事件的发生源。事件源通常是触发事件的组件,比如一个按钮或文本框。
when:
含义:表示事件发生的时间(以毫秒为单位)。
用途:这个时间戳可以帮助开发者确定事件发生的具体时间,有时在处理并发事件时很有用。
id:
含义:表示事件的类型标识符。
用途:每个事件类型都有一个唯一的整数标识符,例如 MouseEvent.MOUSE_CLICKED 表示鼠标点击事件。这个标识符可以在处理事件时用来区分不同类型的事件。
x 和 y:
含义:这两个属性表示事件发生的坐标位置。
用途:在处理与位置相关的事件(如鼠标事件)时,x 和 y 属性可以帮助确定事件发生的屏幕坐标。这对于确定用户点击的位置或者鼠标移动的位置非常重要。
arg:
含义:一些事件可能包含额外的数据或参数。
用途:arg 字段通常用于存储与事件相关的一些附加信息。在某些事件类型中,这个字段可能会被使用,而在其他事件类型中则可能不存在。
- 委托事件处理模型是怎样对事件进行处理的? 事件侦听程序的作用是什么?
答:事件源(Event Source):事件源是指可以产生事件的GUI组件,如按钮、文本框等。这些组件通常实现了某个特定的事件接口,例如 ActionListener 或 MouseListener。
事件(Event):事件是由事件源触发的对象,代表了用户或系统的某种动作或状态变更。例如,当用户点击按钮时,会产生一个 ActionEvent。
事件监听器(Event Listener):事件监听器是一个实现了特定事件接口的类,它包含了处理事件的方法。例如,ActionListener 接口定义了 actionPerformed(ActionEvent e) 方法。
事件处理(Event Handling):当事件源上发生特定的事件时,事件监听器会接收到该事件,并调用相应的处理方法来执行特定的操作。
事件监听器的主要作用有:
分离关注点:通过将事件处理逻辑分离到独立的监听器类中,可以使得组件的代码更加简洁和可读性更强。
复用性:同一个监听器可以被多个事件源共享,提高了代码的复用性。
扩展性:可以轻松地向现有的组件添加新的监听器,以增加更多的功能或改变行为。
松耦合:组件和事件处理逻辑之间解耦,使得修改或扩展功能变得更加容易。
- java. awt. event中定义了哪些事件类? 各类对应的接口是什么? 各接口中都声明了哪些方法?
答:1. ActionEvent
事件类:ActionEvent
接口:ActionListener
方法:actionPerformed(ActionEvent e)
2. KeyEvent
事件类:KeyEvent
接口:KeyListener
方法:
keyPressed(KeyEvent e)
keyReleased(KeyEvent e)
keyTyped(KeyEvent e)
3. MouseEvent
事件类:MouseEvent
接口:MouseListener
方法:
mouseClicked(MouseEvent e)
mousePressed(MouseEvent e)
mouseReleased(MouseEvent e)
mouseEntered(MouseEvent e)
mouseExited(MouseEvent e)
接口:MouseMotionListener
方法:
mouseDragged(MouseEvent e)
mouseMoved(MouseEvent e)
四、程序填空题
1. 阅读下列代码,请在空白处填适当的语句。
import java. awt. *;
import javax. swing. *;
public class ExGui{
private JFrame frame;
private JButton bl, b2;
public static void main( String args[]){
ExGui that= new ExGui(); ∥ 创建一个 ExGui实例
that. go();
!
public void go(){
frame = new JFrame ("GUI example"); ∥创建一个JFrame实例
Container contentPane = ; ∥ 获取内容窗格
contentPane. setLayout( new FlowLayout()); ∥ 为内容窗格设置 FlowLayout布局管理器
b1 = new JButton(" Press me"); ∥ 创建JButton 实例
b2 = new JButton(" Don't press Me");
contentPane. add(b1); contentPane. add(b2); ∥ 添加按钮
frame. pack(); frame. setVisible( true);
2. 以下应用程序创建一个窗口,窗口内放置一个面板,在面板中显示一张图片和一段文字。请在空白处填适当的语句。
import javax. swing.*;
import java. awt. *;
public class Test{
public static void main( String[] args){ MyFrame frame = new MyFrame();
class MyFrame extends JFrame l
public MyFrame()|
setTitle("Test29");
setSize(300, 200);
Tookit tool = ;
Image img= tool. getImage(" text. jpg");
getContentPane(). add( new MyPanel ( img));
setVisible( true);
class MyPanel extends JPanel|
Image myImg;
MyPanel( Image img)| myImg= img;|
public void paintComponent( Graphics g)|
if( mylmg ! = null)g. (myImg, 100, 30, this);
g. drawString("我是一名学生! ", 100, 140);
五、程序设计题
1. 编写程序创建并显示一个标题为“ My Frame”、背景为红色的 Frame。
2. 在前一个习题创建的 Frame 中增加一个背景为黄色的 Panel。
3. 在前一个习题创建的 Panel中加入3个按钮,按钮上分别显示“打开” “关闭”“返回”,在一行内排开。
4. 编写程序,以上、中、下的位置安排3个按钮。
5. 使用createHorizontalBox()和createVerticalBox()方法改写程序8.10。
6. 设计鼠标控制程序。程序运行时,如果在窗口中移动鼠标,窗口的底部将显示出鼠标的当前位置。如果移动鼠标的同时还按住〈 Ctrl〉键或〈 Shift〉键,窗口底部还会显示出C或S。如果用户按下键盘上的键时,程序窗口的底部显示出字母“D”; 当用户松开键盘上的键时,程序窗口的底部显示出字母“U”。
7. 已知 Graphics 对象g, 获得Graphics2D 对象g2d, 然后用圆角长方形类创建对象 cir- cle, 该对象的左上角坐标是(30, 40),半径是50。请写出实现以上要求的代码。
8. 已知 Graphics 对象g, 获得 Graphics2D 对象 g2d, 然后创建并画出正方形对象 rec,正方形的左上角坐标是 (40,50),边长是70。请写出实现以上要求的代码。
9. 请写出绘制左上角为(150,150),半径为80的绿色圆形的语句。设调用的对象是类型为 Graphics的g。