博学谷——让IT教学更简单,让IT学习更有效
? 通过实现XxxListener接口或者继承XxxAdapter类实现一个事件监听器类,并对处理监听动作的
方法进行重写
? 创建事件源对象和事件监听器对象
? 调用事件源的addXxxLisntener()方法,为事件源注册事件监听器对象
2、AWT和Swing的区别 参考答案
AWT 是Abstract Window ToolKit (抽象窗口工具包)的缩写,这个工具包提供了一套与本地图形界面进行交互的接口。AWT 中的图形函数与操作系统所提供的图形函数之间有着一一对应的关系,当我们利用 AWT 来构件图形用户界面的时候,我们实际上是在利用操作系统所提供的图形库。由于不同操作系统的图形库所提供的功能是不一样的,在一个平台上存在的功能在另外一个平台上则可能不存在。为了实现Java语言所宣称的\一次编译,到处运行\的概念,AWT 不得不通过牺牲功能来实现其平台无关性,也就是说,AWT 所提供的图形功能是各种通用型操作系统所提供的图形功能的交集。由于AWT 是依靠本地方法来实现其功能的,我们通常把AWT控件称为重量级控件。
Swing 是在AWT的基础上构建的一套新的图形界面系统,它提供了AWT 所能够提供的所有功能,并且用纯粹的Java代码对AWT 的功能进行了大幅度的扩充。由于在Swing 中没有使用本地方法来实现图形功能,我们通常把Swing控件称为轻量级控件。
AWT和Swing之间的基本区别:AWT 是基于本地方法的C/C++程序,其运行速度比较快;Swing是基于AWT 的Java程序,其运行速度比较慢。对于一个嵌入式应用来说,目标平台的硬件资源往往非常有限,而应用程序的运行速度又是项目中至关重要的因素。在这种矛盾的情况下,简单而高效的AWT 当然成了嵌入式Java的第一选择。而在普通的基于PC或者是工作站的标准Java应用中,硬件资源对应用程序所造成的限制往往不是项目中的关键因素,所以在标准版的Java中则提倡使用Swing,也就是通过牺牲速度来实现应用程序的功能。
博学谷——让IT教学更简单,让IT学习更有效 六、编程题
1、编写一个JFrame窗口,要求如下:
1)在窗口的最上方放置一个JLabel标签,标签中默认的文本是“此处显示鼠标右键点击的坐标” 2)为JFrame窗口添加一个鼠标事件,当鼠标右键点击窗口时,鼠标的坐标在JLabel标签中显示 参考答案
import java.awt.*;
import java.awt.event.*;import javax.swing.*; public class MyMouseHandler extends JFrame { }
public MyMouseHandler() { }
public static void main(String[] args) { }
new 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() == e.BUTTON1) { }
int x = e.getX(); int y = e.getY();
String banner = \鼠标当前点击位置的坐标是\label.setText(banner);
});
this.setVisible(true);
2、编写一个JFrame窗口,要求如下:
1)窗口中的NORTH区域中放置一个JPanel面板 2)JPanel面板中从左到右依次放置如下组件: JLabel标签,标签的文本为“兴趣”
博学谷——让IT教学更简单,让IT学习更有效
三个JCheckBox多选按钮,文本分别为“羽毛球”、“乒乓球”、“唱歌” 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
private String gender = \// JCheckBox复选框的事件监听器
private ActionListener listener1 = new ActionListener() {
public void actionPerformed(ActionEvent e) {
JCheckBox cb = (JCheckBox) e.getSource();
博学谷——让IT教学更简单,让IT学习更有效
};
// JRadioButton单选框的事件监听器
private ActionListener listener2 = new ActionListener() { };
private void print() { }
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); // 清空文本域 area.setText(\
// 如果Set集合中有元素,打印兴趣 if (hobbies.size() > 0)
area.append(\你的兴趣爱好有: \
Iterator
// 如果gender不为空字符串,打印性别 if (!\
area.append(\你的性别为: \area.append(it.next() + \
public void actionPerformed(ActionEvent e) { }
JRadioButton jb = (JRadioButton) e.getSource(); gender = jb.getText(); print(); }
// 选中的复选框把文本添加到Set集合中 if (cb.isSelected()) {
hobbies.add(cb.getText());
// 反之从集合中移除 } else { }
print();
hobbies.remove(cb.getText());
// 打印方法