《Java基础入门第2版》--黑马程序员 课后答案及其详解 第8章 GUI(图形用户接口)

一、填空题

1、 GUI
2、 事件监听器
3、Swing
4、 WindowListener、windowClosing(WindowEvent e)
5、	JMenuBar、JMenu、JMenuItem

二、判断题

1、对  2、错   3、对  4、错  5、错

三、选择题

1、B    2、ABD     3、D     4、ABD     5、C  

四、简答题

1、(1)通过实现XxxListener接口或者继承XxxAdapter类实现一个事件监听器类,并对处理监听动作的方法进行重写
(2)创建事件源对象和事件监听器对象
(3)调用事件源的addXxxLisntener()方法,为事件源注册事件监听器对象

2、Swing工具在AWT的基础上提供了8种布局管理器,分别为BorderLayout(边界布局管理器)、BoxLayout(箱式布局管理器)、CardLayout(卡片布局管理器)、FlowLayout(流式布局管理器)、GridBagLayout(网格包布局管理器)、GridLayout(网格布局管理器)、GroupLayout(分组布局管理器)和SpringLayout(弹性布局管理器)。

3、(1)事件源(Event Source):事件发生的场所,通常就是产生事件的组件,例如窗口、按钮、菜单等。
(2)事件对象(Event):封装了GUI组件上发生的特定事件(通常就是用户的一次操作)。
(3)监听器(Listener):负责监听事件源上发生的事件,并对各种事件做出相应处理的对象(对象中包含事件处理器)。

五、编程题

1.import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class MyMouseHandler extends JFrame {
	public MyMouseHandler() {
		final JLabel label = new JLabel("此处显示鼠标左键点击的坐标");
		label.setOpaque(true);
		label.setBackground(Color.PINK);
		this.add(label, BorderLayout.NORTH);
		this.setSize(300, 200);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {
				if (e.getButton() == MouseEvent.BUTTON1) {
					int x = e.getX();
					int y = e.getY();
					String banner = "鼠标当前点击位置的坐标是" + x + "," + y;
					label.setText(banner);
				}
			}
		});
		this.setVisible(true);
	}
	public static void main(String[] args) {
		new MyMouseHandler();
	}
}
2.import java.awt.*;
import java.util.*;
import javax.swing.*;
import java.awt.event.*;
public class Information extends JFrame {
	// 窗口NORTH部的JPanel面板 
	private JPanel panel = new JPanel();
	// 爱好标签
	private JLabel lb1 = new JLabel("兴趣");
	// 三个表示爱好的JCheckBox复选框
	private JCheckBox cb1 = new JCheckBox("羽毛球");
	private JCheckBox cb2 = new JCheckBox("乒乓球");
private JCheckBox cb3 = new JCheckBox("唱歌");
	// 性别标签
	private JLabel lb2 = new JLabel("性别");
	// 表示性别的JRadioButton单选框
	private JRadioButton rb1 = new JRadioButton("男");
	private JRadioButton rb2 = new JRadioButton("女");
	// ButtonGroup添加JRadioButton,实现单选功能
	private ButtonGroup bg = new ButtonGroup();
	// 文本域组件
	private JTextArea area = new JTextArea();
	// 窗口CENTER部的JScrollPane面板,其中放置area文本域 
	private JScrollPane pane = new JScrollPane(area);
	// Set集合存放选中的兴趣
	private Set<String> hobbies = new HashSet<String>();
	// gender选中的性别
	private String gender = "";
	// JCheckBox复选框的事件监听器
	private ActionListener listener1 = new ActionListener() {
		public void actionPerformed(ActionEvent e) {
			JCheckBox cb = (JCheckBox) e.getSource();
			// 选中的复选框把文本添加到Set集合中
			if (cb.isSelected()) {
				hobbies.add(cb.getText());
			//  反之从集合中移除
			} else {
				hobbies.remove(cb.getText());
			}
			print();
		}
	};
	// JRadioButton单选框的事件监听器
	private ActionListener listener2 = new ActionListener() {
		public void actionPerformed(ActionEvent e) {
			JRadioButton jb = (JRadioButton) e.getSource();
			gender = jb.getText();
			print();
		}
	};
    // 打印方法
	private void print() {
		// 清空文本域
		area.setText("");
		// 如果Set集合中有元素,打印兴趣
		if (hobbies.size() > 0)
area.append("你的兴趣爱好有: ");
		Iterator<String> it = hobbies.iterator();
		while (it.hasNext()) {
			area.append(it.next() + " ");
		}
		// 如果gender不为空字符串,打印性别
		if (!"".equals(gender))
			area.append("你的性别为: " + gender);
	}
	public Information() {
		//添加标签、单选和复选按钮
		panel.add(lb1);
		panel.add(cb1);
		panel.add(cb2);
		panel.add(cb3);
		panel.add(lb2);
		panel.add(rb1);
		panel.add(rb2);
		bg.add(rb1);
		bg.add(rb2);
		// 为单选和复选按钮添加事件监听器
		cb1.addActionListener(listener1);
		cb2.addActionListener(listener1);
		cb3.addActionListener(listener1);
		rb1.addActionListener(listener2);
		rb2.addActionListener(listener2);
		// 将JPanel面板和JScrollPane面板添加到JFrame容器中 
		Container container = this.getContentPane();
		container.add(panel, BorderLayout.NORTH);
		container.add(pane, BorderLayout.CENTER);
		this.pack();
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
	}
	public static void main(String[] args) {
		new Information();
	}
}

六、原题及其解析

一.填空题
1.在Java中,图形用户界面简称( )。 GUI

2.( )负责监听事件源上发生的事情,并对各种事情做出响应处理。事件监听器

3.GUI设计提供了一些基本的图形用户接口开发工具,如AWT、( )和JavaFX。Swing

4.如果单击Frame窗口右上角的关闭按钮能将其关闭,那么这个Frame窗口添加了( )添加器,并实现了监听器的( )方法。
WindowListener 、windowClosing(WindowEvent e)

5.创建下拉式菜单需要使用三个组件,分别是( )、( )和( )。JMenuBar、JMenu、JMenuItem

二.判断题
1.容器(Container)是一个可以包含基本组件和其他容器的组件。( )对√

2.可以通过实现ActionListener接口或者继承ActionAdapter类来实现动作事件监听器。( )错×

3.CardLayout布局管理器将界面看做一系列卡片,在任何时候只有其中一张卡片是可见的。( )对√

4.非模态对话框是指用户需要等到处理完对话框后才能继续与其他窗口进行交互。( )错×

5.JFrame的默认布局管理器是FlowLayout。( )错×

三.选择题
1.下面四个组件中哪一个不是JComponent的子类?( ) B
A.JButton B.JDialog C.JLabel D.JMenuBar

2.下面四个选项中,哪些是事件处理机制中的角色?(多选)( ) ABD
A.事件 B.事件源
C.事件接口 D.事件监听器

3.ActionEvent的对象会被传递给以下哪个事件处理方法?( ) D
A.addChangeListener( ) B.addActionListener( )
C.stateChanged( ) D.actionPerformed( )

4.下面哪些是FlowLayout类中表示对齐方式的常量?(多选)( ) ABD
A.FlowLayout.LEFT B.FlowLayout.CENTER
C.FlowLayout.VERTICAL D.FlowLayout.RIGHT

5.下列选项中关于JavaFX,描述错误的是( )。 C
A.JavaFX是一个强大的图形和多媒体处理工具包集合
B.JavaFX允许开发者来设计、创建、测试、调试和部署客户端程序
C.JavaFX不能与Swing实现互操作
D.JavaFX可以实现跨平台功能

四.简答题
1.请简述GUI中实现事件监听的步骤。
通过实现XxxListener接口或者继承XxxAdapter类实现一个事件监听器类,并对处理监听动作的方法进行重写
创建事件源对象和事件监听器对象
调用事件源的addXxxLisntener()方法,为事件源注册事件监听器对象


2.请简述Swing中的布局管理器有哪些。
Swing工具在AWT的基础上提供了8种布局管理器,分别为BorderLayout(边界布局管理器)、BoxLayout(箱式布局管理器)、CardLayout(卡片布局管理器)、FlowLayout(流式布局管理器)、GridBagLayout(网格包布局管理器)、GridLayout(网格布局管理器)、GroupLayout(分组布局管理器)和SpringLayout(弹性布局管理器)。

3.Swing事件处理的过程中涉及哪些对象。
事件源(Event Source):事件发生的场所,通常就是产生事件的组件,例如窗口、按钮、菜单等。
事件对象(Event):封装了GUI组件上发生的特定事件(通常就是用户的一次操作)。
监听器(Listener):负责监听事件源上发生的事件,并对各种事件做出相应处理的对象(对象中包含事件处理器)。


五.编程题
1.编写一个JFrame窗口,要求如下:
(1)在窗口的最上方放置一个JLable标签,标签中默认的文本是"此处显示鼠标右键单击的坐标"。
(2)为JFrame窗口添加一个鼠标事件,当鼠标右键单击窗口时,鼠标的坐标在JLabel标签中显示。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class MyMouseHandler extends JFrame {
	public MyMouseHandler() {
		final JLabel label = new JLabel("此处显示鼠标右键点击的坐标");
		label.setOpaque(true);
		label.setBackground(Color.PINK);
		this.add(label, BorderLayout.NORTH);
		this.setSize(300, 200);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {
				if (e.getButton() == MouseEvent.BUTTON1) {
					int x = e.getX();
					int y = e.getY();
					String banner = "鼠标当前点击位置的坐标是" + x + "," + y;
					label.setText(banner);
				}
			}
		});
		this.setVisible(true);
	}
	public static void main(String[] args) {
		new MyMouseHandler();
	}
}

2.编写一个JFrame窗口,要求如下:
(1)窗口中的NORTH区域中放置一个JPanel面板。
(2)JPanel面板中从左到右依次放置如下组件:
①1个JLabel标签,标签的文本为"兴趣"。
②3个JCheckBox多选按钮,文本分别为"羽毛球"“乒乓球”“唱歌”。
③1个JLabel标签,标签的文本为"性别"
④两个JRadioButton,文本分别为"男"“女”
(3)窗口中的CENTER区域放置一个JScrollPane容器,容器中放置一个JTextArea文本域。
(4)当单击多选按钮和单选按钮时,会把选中按钮的文本显示在JTextArea文本域中。

import java.awt.*;
import java.util.*;
import javax.swing.*;
import java.awt.event.*;
public class Information extends JFrame {
	// 窗口NORTH部的JPanel面板 
	private JPanel panel = new JPanel();
	// 爱好标签
	private JLabel lb1 = new JLabel("兴趣");
	// 三个表示爱好的JCheckBox复选框
	private JCheckBox cb1 = new JCheckBox("羽毛球");
	private JCheckBox cb2 = new JCheckBox("乒乓球");
private JCheckBox cb3 = new JCheckBox("唱歌");
	// 性别标签
	private JLabel lb2 = new JLabel("性别");
	// 表示性别的JRadioButton单选框
	private JRadioButton rb1 = new JRadioButton("男");
	private JRadioButton rb2 = new JRadioButton("女");
	// ButtonGroup添加JRadioButton,实现单选功能
	private ButtonGroup bg = new ButtonGroup();
	// 文本域组件
	private JTextArea area = new JTextArea();
	// 窗口CENTER部的JScrollPane面板,其中放置area文本域 
	private JScrollPane pane = new JScrollPane(area);
	// Set集合存放选中的兴趣
	private Set<String> hobbies = new HashSet<String>();
	// gender选中的性别
	private String gender = "";
	// JCheckBox复选框的事件监听器
	private ActionListener listener1 = new ActionListener() {
		public void actionPerformed(ActionEvent e) {
			JCheckBox cb = (JCheckBox) e.getSource();
			// 选中的复选框把文本添加到Set集合中
			if (cb.isSelected()) {
				hobbies.add(cb.getText());
			//  反之从集合中移除
			} else {
				hobbies.remove(cb.getText());
			}
			print();
		}
	};
	// JRadioButton单选框的事件监听器
	private ActionListener listener2 = new ActionListener() {
		public void actionPerformed(ActionEvent e) {
			JRadioButton jb = (JRadioButton) e.getSource();
			gender = jb.getText();
			print();
		}
	};
    // 打印方法
	private void print() {
		// 清空文本域
		area.setText("");
		// 如果Set集合中有元素,打印兴趣
		if (hobbies.size() > 0)
area.append("你的兴趣爱好有: ");
		Iterator<String> it = hobbies.iterator();
		while (it.hasNext()) {
			area.append(it.next() + " ");
		}
		// 如果gender不为空字符串,打印性别
		if (!"".equals(gender))
			area.append("你的性别为: " + gender);
	}
	public Information() {
		//添加标签、单选和复选按钮
		panel.add(lb1);
		panel.add(cb1);
		panel.add(cb2);
		panel.add(cb3);
		panel.add(lb2);
		panel.add(rb1);
		panel.add(rb2);
		bg.add(rb1);
		bg.add(rb2);
		// 为单选和复选按钮添加事件监听器
		cb1.addActionListener(listener1);
		cb2.addActionListener(listener1);
		cb3.addActionListener(listener1);
		rb1.addActionListener(listener2);
		rb2.addActionListener(listener2);
		// 将JPanel面板和JScrollPane面板添加到JFrame容器中 
		Container container = this.getContentPane();
		container.add(panel, BorderLayout.NORTH);
		container.add(pane, BorderLayout.CENTER);
		this.pack();
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
	}
	public static void main(String[] args) {
		new Information();
	}
}
  • 22
    点赞
  • 135
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

香鱼嫩虾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值