
Java事宜机制包含三个部份:事宜、事宜源、事宜监听器。
1、事宜
事宜平常继续自java.util.EventObject类,封装了事宜源对象及跟事宜相干的信息。
import java.util.EventObject; /** * 事宜类,用于封装事宜源及一些与事宜相干的参数. */ public class CusEvent extends EventObject { private static final long serialVersionUID = 1L; private Object source;//事宜源 public CusEvent(Object source){ super(source); this.source = source; } public Object getSource() { return source; } public void setSource(Object source) { this.source = source; } }
2、事宜源
事宜源是事宜发作的处所,由于事宜源的某项属性或状况发作了转变(比方BUTTON被单击、TEXTBOX的值发作转变等等)致使某项事宜发作。换句话说就是生成了响应的事宜对象。由于事宜监听器要注册在事宜源上,所以事宜源类中应当要有艳服监听器的容器(List、Set等等)。
/** * 事宜源. */ public class EventSourceObject { private String name; //监听器容器 private Set<CusEventListener> listener; public EventSourceObject(){ this.listener = new HashSet<CusEventListener>(); this.name = "defaultname"; } //给事宜源注册监听器 public void addCusListener(CusEventListener cel){ this.listener.add(cel); } //当事宜发作时,关照注册在该事宜源上的一切监听器做出响应的回响反映(挪用回调要领) protected void notifies(){ CusEventListener cel = null; Iterator<CusEventListener> iterator = this.listener.iterator(); while(iterator.hasNext()){ cel = iterator.next(); cel.fireCusEvent(new CusEvent(this)); } } public String getName() { return name; } //模仿事宜触发器,当成员变量name的值发作变化时,触发事宜。 public void setName(String name) { if(!this.name.equals(name)){ this.name = name; notifies(); } } }
3、事宜监听器
事宜监听器完成java.util.EventListener接口,注册在事宜源上,当事宜源的属性或状况转变时,获得响应的监听器挪用其内部的回调要领。
import java.util.EventListener; /** * 事宜监听器,完成java.util.EventListener接口。定义回调要领,将你想要做的事 * 放到这个要领下,由于事宜源发作响应的事宜时会挪用这个要领。 */ public class CusEventListener implements EventListener { //事宜发作后的回调要领 public void fireCusEvent(CusEvent e){ EventSourceObjecteObject = (EventSourceObject)e.getSource(); System.out.println("My name has been changed!"); System.out.println("I got a new name,named \""+eObject.getName()+"\""); } }
测试类
public class MainTest { public static void main(String[] args) { EventSourceObject object = new EventSourceObject(); //注册监听器 object.addCusListener(new CusEventListener(){ @Override public void fireCusEvent(CusEvent e) { super.fireCusEvent(e); } }); //触发事宜 object.setName("AiLu"); } }
4、事宜、事宜源、监听器三者之间的联络
事宜源-----发生----->事宜------>被事宜监听器发明------>进入事宜处置惩罚代码
import java.awt.Frame; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class DemoAction extends Frame {//窗口就是事宜源 public DemoAction() { this.setTitle("窗口封闭"); this.setLocation(400, 200); this.setSize(360, 280); //给窗口绑定一个事宜监听器 this.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) {//事宜WindowEvent System.exit(0);//封闭窗口事宜, 那末退出jvm } }); this.setVisible(true); } public static void main(String[] args) { new DemoAction(); } }
5、事宜处置惩罚的重要步骤:
(1)生成监听器;
(2)在发作事宜的对应组件上注册监听器;
(3)注册监听器的组件上发作事宜时,将事宜对象返回给监听器;
(4)监听器挪用响应要领处置惩罚事宜。
代码示例:
public class LoginListener implements ActionListener{ String text; public void actionPerformed(ActionEvent e){ if("willow".equals(text)){ system.out.println("登录胜利!\n"); } } } public class Login(){ public void showFrame(){ //建立窗体 JFrame LFrame = new JFrame(); LFrame.setSize(1000,800); LFrame.setLocationRelativeTo(null); LFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); LFrame.setLayout(new FlowLayout()); //建立监听器对象 LoginListener lg = new LoginListener(); //给窗体增加按钮组件 JTextField tf = new JTextField(); LFrame.add(tf); //给输入框增加监听器 tf.addActionLisener(lg); tf.text=tf.getText(); } };
浩瀚java培训视频,尽在ki4网,迎接在线进修!
以上就是什么是java事宜的细致内容,更多请关注ki4网别的相干文章!