- 浏览: 327800 次
- 性别:
- 来自: 北京
-
文章分类
- 全部博客 (254)
- java (178)
- tomcat (6)
- 邮件 (1)
- smtp (1)
- Linux (2)
- 编码 (2)
- 导入工程 (1)
- Specification Level (1)
- hibernate (10)
- 字段类型 (1)
- 字段类型匹配 (1)
- 数据库 (3)
- sql (9)
- struts2 (8)
- 类型转换 (2)
- java,MyEclipse,SVN (1)
- Myecplise (4)
- 输入校验 (1)
- JFrame (2)
- Oracle (8)
- google (1)
- Swing (3)
- Fusioncharts (1)
- 找工作 (0)
- js (4)
- jsp (11)
- displaytag (1)
- spring (8)
- 工作 (1)
- String (1)
- 算法 (2)
- IO (1)
- xml (3)
- 设计模式 (1)
- UML (1)
- 文档 (1)
- ajax (1)
- 日常 (7)
- sql server (1)
- mysql (3)
- git (1)
- Maven (1)
- mongodb (1)
- postman (1)
最新评论
AWT事件模型【重点】:
1、事件:描述发生了什么的对象。
2、事件源:事件的产生器。
3、事件处理器:接收事件、解释事件并处理用户交互的方法(归根结底是一个方法)。
---如果用户在用户界面层执行了一个动作(鼠标点击和按键),这将导致一个事件的发生。事件是描述发生了什么的对象。存在各种不同类型的事件类用来描述各种类型的用户交互。
事件源:
事件源是一个事件的产生者。例如,在Button组件上点击鼠标会产生以这个Button为源的一个ActionEvent。这个ActionEvent实例是一个对象,它包含关于刚才所发生的那个时间的信息的对象,这些信息包括:
getActionCommand----返回与动作相关联的命令名称。
getWhen----返回事件发生的时间。
事件处理器:
事件处理器就是一个接收事件、解释事件并处理用户交互的方法。
•-事件-描述发生了什么的对象
•-事件源-事件的产生器
•-事件处理器-接收事件、解释事件并处理用户交互的方法
JDK1.1的事件模型:委托模型
事件监听器:实现了监听器接口的类。一个鉴定器对象是一个实现了专门的监听器接口的类的实例。
一个事件监听器的简单例子:
---在Button对象上用鼠标进行点击时,将发送一个ActionEvent事件。这个ActionEvent事件会被使用addActionListener()方法进行注册的所有ActionListener的actionPerformed()方法接收。
---ActionEvent类的getActionCommand()方法返回与动作相关联的命令名称。
---以按钮的点击动作为例,将返回Button的标签。
当单击一个按钮时就会产生一个事件(ActionEvent),然后检查是否有与该按钮关联的事件处理器(实际上就是一个方法),如果没有,那么什么都不执行;如果有,就会将该事件传递给与该按钮关联的事件处理器方法,作为该方法的参数,之后该事件处理器方法就会自动得到调用,并且该方法可以使用传递过来的ActionEvent对象,进而获得事件发生时与该事件及事件源相关联的那些信息。
委托模型优点:
---事件不会被意外地处理。
---有可能创建并使用适配器(adater)类对事件动作进行分类。
---委托模型有利于把工作分布到各个类中。
AWT事件处理机制:
几类具有典型代表意义的事件:
MouseEvent:“鼠标事件”,鼠标按下,鼠标释放,鼠标点击等。
WindowEvent:“窗口事件”,点击关闭按钮,窗口得到与失去焦点,窗口最小化等。
ActionEvent:“动作事件”,不代表具体的动作,是一种语义,如按钮或菜单被鼠标点击,单行文本框中按下回车键等都可以看做是ActionEvent事件,可以这么理解,如果用户的一个动作导致了某个组件本身最基本的动作发生了,这就是ActionEvent事件。
事件类型:
---事件类的层次结果图如下所示。许多事件类在java.awt.event包中,也有一些事件类在API的其他地方。
---对于每类事件,都有一个接口,这个接口必须由想接收这个事件的类的对象实现。这个接口还要求定义一个或多个方法。当发生特定的事件时,就会调用这些方法(例如ButtonHandler实现了ActionListener接口)。
两个事件监听器的实例,重点查看:
重点:同一个事件源可以注册多个监听器,并且同时起作用
一个小的总结:事件,AWT的事件模型是一种委托模型,可以注册一个监听器,监听器里面每一个方法就对应于某一个特定的事件,当事件发生的时候监听器里面对应的方法就会被调用。
-----多监听者可以使一个程序的不想关部分执行同样的动作。
-----事件发生时,所有被注册的监听者的处理器都会被调用。
在以上定义的监听器类中,比如实现了MouseListener接口的监听器类MyLouseListener,由于语法要求我们必须要实现接口里面定义的所有(5个)方法,但是一般我们需要处理的特定的事件也就一两个,能用到的方法也就一两个,所以实现出来的其他方法都是用不到的,无用的代码,但是我们又不得不实现它们,因为这是语法要求,这样就产生了矛盾。在这种矛盾的背景下就产生了适配器Adapter这种概念。
Java中的组件若想添加事件处理器,都会使用形如addXxxListener的方法来添加。
事件(Adapters)适配器:
-----你定义的Listener可以继承Adapter类,而且只需重写你所需要的方法。
-----为了方便起见,Java语言提供了Adapters类,用来实现含有多个方法的类。这些Adapters类中的方法是空的。
-----你可以继承Adapters类,而且只需要重写你所需要的方法。
适配器jdk已经为我们提供好了的,而且适配器这个类已经实现好了对应的接口,比如说包含了5个方法的那个监听器接口MouseListener,已经有一个对应的适配器类实现好了它,我们自己的处理器只需要继承这个适配器类,这样也可以表明我实现了MouseListener这个接口,我们从这个适配器类里面把5个方法全都继承下来了。但是假如我们只对其中一个方法感兴趣(我们需要处理的特定的事件就一个),那么我们只需要在我们处理器里面把这一个方法重写即可,其他四个方法我们用不到,就不需要重写了。
比如说:
MouseAdapter类实现了MouseMotionListener接口
MouseAdapter类实现了MouseListener接口
适配器把实现接口里面的所有方法都空实现了,什么都没有做。
下面是TwoListener使用适配器改版之后的代码
适配器只是简化我们的工作而已,并不会完成实际的功能。是我们自己的监听处理类和真正的监听器接口之间的桥梁,起到一个适配的作用。
为简化编程,JDK针对大多数事件监听器接口定义了相应的实现类,我们称之为事件适配器(Adapter)类。
在适配器类中,实现类相应监听器接口所有方法,但不做任何事情,只要继承适配器类,就等于实现了相应的监听器接口。
如果要对某类事件的某种情况进行处理,只要覆盖相应的方法就可以,其他的方法再也不用“简单实现”了。
如果想用作事件监听器的类已经继承了别的类,就不能再继承适配器类了,只能去实现事件监听器接口了。
重点:针对监听器接口ActionListener没有提供相应的适配器,因为它里面只有一个方法,有没有适配器我们要想用它都得把里面的那一个方法实现或重写了,因此没必要提供适配器了。要想使用ActionListener监听,就只能实现ActionListener这个接口了,没有其他方法。除了这一个Listener,其他的Listener都有对应的适配器。
1、事件:描述发生了什么的对象。
2、事件源:事件的产生器。
3、事件处理器:接收事件、解释事件并处理用户交互的方法(归根结底是一个方法)。
---如果用户在用户界面层执行了一个动作(鼠标点击和按键),这将导致一个事件的发生。事件是描述发生了什么的对象。存在各种不同类型的事件类用来描述各种类型的用户交互。
事件源:
事件源是一个事件的产生者。例如,在Button组件上点击鼠标会产生以这个Button为源的一个ActionEvent。这个ActionEvent实例是一个对象,它包含关于刚才所发生的那个时间的信息的对象,这些信息包括:
getActionCommand----返回与动作相关联的命令名称。
getWhen----返回事件发生的时间。
事件处理器:
事件处理器就是一个接收事件、解释事件并处理用户交互的方法。
•-事件-描述发生了什么的对象
•-事件源-事件的产生器
•-事件处理器-接收事件、解释事件并处理用户交互的方法
JDK1.1的事件模型:委托模型
事件监听器:实现了监听器接口的类。一个鉴定器对象是一个实现了专门的监听器接口的类的实例。

一个事件监听器的简单例子:
package com.shengshiyuan.awt; import java.awt.BorderLayout; import java.awt.Button; import java.awt.Frame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class TestButton { public static void main(String[] args) { Frame frame = new Frame(); Button button = new Button("Press Me!"); // 为组件添加事件监听器 button.addActionListener(new ButtonHandler()); frame.add(button, BorderLayout.CENTER); frame.pack(); frame.setVisible(true); } } /** * 事件监听器 * 类: ButtonHandler <br> * 描述: TODO <br> * 作者: * 时间: Nov 4, 2013 9:32:31 PM */ class ButtonHandler implements ActionListener { public void actionPerformed(ActionEvent e) { String label = e.getActionCommand(); System.out.println(label); } }
---在Button对象上用鼠标进行点击时,将发送一个ActionEvent事件。这个ActionEvent事件会被使用addActionListener()方法进行注册的所有ActionListener的actionPerformed()方法接收。
---ActionEvent类的getActionCommand()方法返回与动作相关联的命令名称。
---以按钮的点击动作为例,将返回Button的标签。
当单击一个按钮时就会产生一个事件(ActionEvent),然后检查是否有与该按钮关联的事件处理器(实际上就是一个方法),如果没有,那么什么都不执行;如果有,就会将该事件传递给与该按钮关联的事件处理器方法,作为该方法的参数,之后该事件处理器方法就会自动得到调用,并且该方法可以使用传递过来的ActionEvent对象,进而获得事件发生时与该事件及事件源相关联的那些信息。
委托模型优点:
---事件不会被意外地处理。
---有可能创建并使用适配器(adater)类对事件动作进行分类。
---委托模型有利于把工作分布到各个类中。
AWT事件处理机制:
几类具有典型代表意义的事件:
MouseEvent:“鼠标事件”,鼠标按下,鼠标释放,鼠标点击等。
WindowEvent:“窗口事件”,点击关闭按钮,窗口得到与失去焦点,窗口最小化等。
ActionEvent:“动作事件”,不代表具体的动作,是一种语义,如按钮或菜单被鼠标点击,单行文本框中按下回车键等都可以看做是ActionEvent事件,可以这么理解,如果用户的一个动作导致了某个组件本身最基本的动作发生了,这就是ActionEvent事件。
事件类型:
---事件类的层次结果图如下所示。许多事件类在java.awt.event包中,也有一些事件类在API的其他地方。
---对于每类事件,都有一个接口,这个接口必须由想接收这个事件的类的对象实现。这个接口还要求定义一个或多个方法。当发生特定的事件时,就会调用这些方法(例如ButtonHandler实现了ActionListener接口)。
两个事件监听器的实例,重点查看:
package com.shengshiyuan.awt; import java.awt.Button; import java.awt.Frame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import java.util.Date; public class MyFrame2 { public static void main(String[] args) { Frame frame = new Frame(); Button button = new Button("click me"); // 添加事件监听器 button.addActionListener(new MyListener()); frame.add(button); frame.setSize(500, 500); // 添加窗口监听器 frame.addWindowListener(new MyWindowListener()); frame.setVisible(true); } } class MyListener implements ActionListener { @SuppressWarnings("deprecation") public void actionPerformed(ActionEvent e) { long time = e.getWhen(); Date date = new Date(time); // new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date); System.out.println(date.toLocaleString()); } } // 窗口监听器,7个方法必须都实现 class MyWindowListener implements WindowListener { public void windowActivated(WindowEvent e) { // TODO Auto-generated method stub } /** * 窗口关闭的时候此方法被调用 * 方法: windowClosed <br> * 描述: TODO * @param e * @see java.awt.event.WindowListener#windowClosed(java.awt.event.WindowEvent) */ public void windowClosed(WindowEvent e) { // TODO Auto-generated method stub } public void windowClosing(WindowEvent e) { System.out.println("关闭窗口!"); System.exit(0); } public void windowDeactivated(WindowEvent e) { // TODO Auto-generated method stub } public void windowDeiconified(WindowEvent e) { // TODO Auto-generated method stub } public void windowIconified(WindowEvent e) { // TODO Auto-generated method stub } public void windowOpened(WindowEvent e) { // TODO Auto-generated method stub } }
package com.shengshiyuan.awt; import java.awt.BorderLayout; import java.awt.Frame; import java.awt.Label; import java.awt.TextField; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; /** * MouseMotionListener为鼠标移动监听器 * MouseListener为鼠标监听器 * 类: TwoListener <br> * 描述: TODO <br> * 作者: * 时间: Nov 4, 2013 10:38:07 PM */ public class TwoListener implements MouseMotionListener, MouseListener { private Frame frame; private TextField textfield; public void go() { Frame frame = new Frame("Two Listeners Example"); frame.add(new Label("click"), BorderLayout.NORTH); textfield = new TextField(30); frame.add(textfield, BorderLayout.SOUTH); // 为frame添加鼠标移动监听 frame.addMouseMotionListener(this); // 为frame添加鼠标监听 frame.addMouseListener(this); // 为frame添加第二个鼠标监听(得出的结论:同一个事件源可以注册多个监听器,并且同时起作用) frame.addMouseListener(new MyMouseListener()); frame.setSize(300, 200); frame.setVisible(true); } public static void main(String[] args) { TwoListener two = new TwoListener(); two.go(); } // 鼠标拖拽触发此方法 public void mouseDragged(MouseEvent e) { String str = "x:" + e.getX() + ", y:" + e.getY(); this.textfield.setText(str); } public void mouseMoved(MouseEvent e) { // TODO Auto-generated method stub } public void mouseClicked(MouseEvent e) { // TODO Auto-generated method stub } public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub } // 鼠标离开当前frame时触发此方法 public void mouseExited(MouseEvent e) { String str = "The mouse has left the Frame"; this.textfield.setText(str); } public void mousePressed(MouseEvent e) { // TODO Auto-generated method stub } public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub } } class MyMouseListener implements MouseListener { public void mouseClicked(MouseEvent e) { // TODO Auto-generated method stub } // 鼠标进入到Frame里面的时候触发此方法 public void mouseEntered(MouseEvent e) { String str = "The mouse has entered the Frame"; System.out.println(str); } // 鼠标离开当前frame时触发此方法 public void mouseExited(MouseEvent e) { String str = "The mouse has exited the Frame"; System.out.println(str); } public void mousePressed(MouseEvent e) { // TODO Auto-generated method stub } public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub } }
重点:同一个事件源可以注册多个监听器,并且同时起作用
一个小的总结:事件,AWT的事件模型是一种委托模型,可以注册一个监听器,监听器里面每一个方法就对应于某一个特定的事件,当事件发生的时候监听器里面对应的方法就会被调用。
-----多监听者可以使一个程序的不想关部分执行同样的动作。
-----事件发生时,所有被注册的监听者的处理器都会被调用。
在以上定义的监听器类中,比如实现了MouseListener接口的监听器类MyLouseListener,由于语法要求我们必须要实现接口里面定义的所有(5个)方法,但是一般我们需要处理的特定的事件也就一两个,能用到的方法也就一两个,所以实现出来的其他方法都是用不到的,无用的代码,但是我们又不得不实现它们,因为这是语法要求,这样就产生了矛盾。在这种矛盾的背景下就产生了适配器Adapter这种概念。
Java中的组件若想添加事件处理器,都会使用形如addXxxListener的方法来添加。
事件(Adapters)适配器:
-----你定义的Listener可以继承Adapter类,而且只需重写你所需要的方法。
-----为了方便起见,Java语言提供了Adapters类,用来实现含有多个方法的类。这些Adapters类中的方法是空的。
-----你可以继承Adapters类,而且只需要重写你所需要的方法。
适配器jdk已经为我们提供好了的,而且适配器这个类已经实现好了对应的接口,比如说包含了5个方法的那个监听器接口MouseListener,已经有一个对应的适配器类实现好了它,我们自己的处理器只需要继承这个适配器类,这样也可以表明我实现了MouseListener这个接口,我们从这个适配器类里面把5个方法全都继承下来了。但是假如我们只对其中一个方法感兴趣(我们需要处理的特定的事件就一个),那么我们只需要在我们处理器里面把这一个方法重写即可,其他四个方法我们用不到,就不需要重写了。
比如说:
MouseAdapter类实现了MouseMotionListener接口
MouseAdapter类实现了MouseListener接口
适配器把实现接口里面的所有方法都空实现了,什么都没有做。
下面是TwoListener使用适配器改版之后的代码
package com.shengshiyuan.awt; import java.awt.BorderLayout; import java.awt.Frame; import java.awt.Label; import java.awt.TextField; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; /** * 利用适配器实现事件监听 * MouseAdapter实现了MouseMotionListener接口 * MouseAdapter实现了MouseListener接口 * 这里间接的实现了以上两个接口 * 类: TwoListenerAdapter <br> * 描述: TODO <br> * 作者: * 时间: Nov 5, 2013 11:34:23 AM */ public class TwoListenerAdapter extends MouseAdapter { private Frame frame; private TextField textfield; public void go() { Frame frame = new Frame("Two Listeners Example"); frame.add(new Label("click"), BorderLayout.NORTH); textfield = new TextField(30); frame.add(textfield, BorderLayout.SOUTH); // 为frame添加鼠标移动监听 frame.addMouseMotionListener(this); // 为frame添加鼠标监听 frame.addMouseListener(this); // 为frame添加第二个鼠标监听(得出的结论:同一个事件源可以注册多个监听器,并且同时起作用) frame.addMouseListener(new MyMouseListener()); frame.setSize(300, 200); frame.setVisible(true); } public static void main(String[] args) { TwoListenerAdapter two = new TwoListenerAdapter(); two.go(); } // 对应鼠标移动事件(MouseAdapter实现MouseMotionListener接口里面的方法,然后这里又重写MouseAdapter类里的这个方法) @Override public void mouseDragged(MouseEvent e) { String str = "x:" + e.getX() + ", y:" + e.getY(); this.textfield.setText(str); } // 对应鼠标离开当前frame事件(MouseAdapter实现MouseListener接口里面的方法,然后这里又重写MouseAdapter类里的这个方法) @Override public void mouseExited(MouseEvent e) { String str = "The mouse has left the Frame"; this.textfield.setText(str); } // 对应鼠标进入Frame事件(MouseAdapter实现MouseListener接口里面的方法,然后这里又重写MouseAdapter类里的这个方法) @Override public void mouseEntered(MouseEvent e) { String str = "The mouse has entered the Frame"; System.out.println(str); } }
适配器只是简化我们的工作而已,并不会完成实际的功能。是我们自己的监听处理类和真正的监听器接口之间的桥梁,起到一个适配的作用。
为简化编程,JDK针对大多数事件监听器接口定义了相应的实现类,我们称之为事件适配器(Adapter)类。
在适配器类中,实现类相应监听器接口所有方法,但不做任何事情,只要继承适配器类,就等于实现了相应的监听器接口。
如果要对某类事件的某种情况进行处理,只要覆盖相应的方法就可以,其他的方法再也不用“简单实现”了。
如果想用作事件监听器的类已经继承了别的类,就不能再继承适配器类了,只能去实现事件监听器接口了。
重点:针对监听器接口ActionListener没有提供相应的适配器,因为它里面只有一个方法,有没有适配器我们要想用它都得把里面的那一个方法实现或重写了,因此没必要提供适配器了。要想使用ActionListener监听,就只能实现ActionListener这个接口了,没有其他方法。除了这一个Listener,其他的Listener都有对应的适配器。
发表评论
-
领域精通涉及技术点(不分先后)
2017-12-20 19:35 634Java8 netty jvm kafaka消息队列 上传下载 ... -
计算机各种单位讲解及换算
2017-12-13 13:54 1666我还听过有UK的 一、最小单位:位(bit,缩写为b) 在原 ... -
JAVA字符串格式化-String.format()和MessageFormat的使用
2017-12-05 10:39 1491String.format()常规类型的格式化 Stri ... -
eclipse启动项目常见问题
2017-11-16 17:46 1204今儿遇到了个问题,ecli ... -
字符编码笔记:ASCII,Unicode和UTF-8
2017-10-23 16:37 466讲的太牛逼了: http://ww ... -
emoji简单讲解
2017-10-23 15:17 991emoji处理方式大起底 http://blog.csdn.n ... -
BigDecimal讲解
2017-10-12 15:58 458BigDecimal 由任意精度的整数非标度值 和 32 位的 ... -
eclips 控制台console上不打印信息
2017-09-06 21:53 5921、进windows菜单 -> show view -& ... -
详解RequestMappingHandlerMapping和RequestMappingHandlerAdapter
2017-08-29 17:08 3019http://donald-draper.iteye.com/ ... -
用@ExceptionHandler 来进行切面异常处理
2017-08-29 11:47 2341有时候我们想处理某个类里Controller中抛出的异常怎么搞 ... -
Spring 注解@Component、@Repository、@Service、@Controller区别
2017-08-28 15:27 1035spring 2.5 中除了提供 @Com ... -
线程的一点小总结
2017-08-23 20:36 721java中main方法启动的是一个进程还是一个线程? 答:是一 ... -
线程池
2017-08-23 17:35 539诸如Web 服务器、数据库 ... -
Class源码大概讲解
2017-08-23 16:47 534http://blog.csdn.net/a327369238 ... -
Spring 事务相关
2017-08-14 12:10 485Transactionz注解的readOnly ... -
把时间当做朋友-前言
2017-08-13 20:47 420要管理的不是时间,而是自己。人们生活在同一个世界,却又各自 ... -
单例里面的方法讲解
2017-08-11 14:55 496spring里的controller是单例的。系统针对每个co ... -
eclipse拷贝出来的项目名称还是原来的
2017-07-26 16:46 1097需要修改的有如下几个地方: 1、pom.xml里面打包的名字一 ... -
自定义hibernate方言,新增自定义函数
2017-06-27 10:47 893按位与运算(&)在许多数据库中都是支持的,遗憾的是,H ... -
http请求参数:header body paramter三种参数区别、联系
2017-06-19 10:46 491412345
相关推荐
在本篇文章中,我们将深入探讨Java AWT的核心概念、关键组件以及其与后续出现的Swing库的关系。 1. **AWT的基本概念** - AWT是Java标准版(Java SE)的一部分,它基于本地操作系统提供的窗口系统来创建和管理GUI...
1. **Swing库**:Java的Swing库提供了丰富的组件来创建GUI,它是Java AWT(Abstract Window Toolkit)的扩展。Swing控件具有更好的可定制性和现代外观,并且是轻量级的,运行在Java虚拟机上。 2. **JFrame**:...
本篇文章将深入探讨如何使用Java Swing实现SFTP文件夹上传的功能,并为后续的多目标地址上传做准备。 首先,我们需要导入必要的库。在Java中,我们可以使用JSch库来实现SFTP功能。JSch是一个纯Java实现的SSH2库,它...
Java AWT和Swing提供基本的图形界面,而更现代的LibGDX等框架则提供了更强大的2D和3D图形功能。通过改变物体的位置、旋转角度等属性,实现坦克和子弹的动画效果。 五、碰撞检测 在坦克大战中,碰撞检测是关键的算法...
JAVA提供了AWT和Swing两个库来创建GUI,这两个库都包含了一系列组件,如按钮、文本框、面板等,以及布局管理器来组织这些组件。在"飞机大战"游戏中,GUI用于显示游戏界面,包括玩家的飞机、敌机、子弹、障碍物等元素...
6. **图形渲染**:坦克大战的界面展示主要依赖于JAVA的图形库,如`java.awt`和`javax.swing`。通过创建图形对象,绘制到画布上,我们可以实现动态的游戏画面。同时,利用帧率控制技术,可以保证游戏的流畅性。 7. *...
使用JMF内置的UI组件,以及Java AWT和Swing库,创建了一个可以展示媒体内容的界面。这不仅涵盖了多媒体播放,还涉及到了GUI编程和事件处理。 ### 4. 媒体广播应用 第三个例子是一个媒体广播应用,能够将本地媒体...
3. **UI界面设计**:程序中使用了Swing/AWT组件来构建用户界面,包括文本框、按钮等基本元素,实现了基本的用户交互功能。 4. **线程管理**:为了处理网络通信中的数据收发,程序使用了多线程技术,确保在进行网络...
- **图形用户界面**:使用Swing或AWT库构建用户友好的界面。 - **事件处理机制**:利用监听器模式响应用户的交互行为。 - **数据结构**:合理选择数据结构存储投票结果。 - **异常处理**:确保程序在异常情况下仍能...
- 查找下一个(`mEdit_SearchNext`):查找上一次搜索的后续结果。 - 替换(`mEdit_Replace`):替换指定文本。 - 跳转(`mEdit_Turnto`):跳转至指定行。 - 全选(`mEdit_SelectAll`):选中所有文本。 - 时间/日期(`...
- **应用场景:** Java Swing和AWT库中提供了按钮组件。 6. **Break (中断):** - **定义:** 用于提前退出循环或switch语句的关键字。 - **应用场景:** Java中的流程控制结构。 7. **Body (身体):** - **定义:**...