`
约巴拿
  • 浏览: 19467 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

接口和事件机制总结

阅读更多
                          接口
     一、定义接口的格式:
            public interface 接口名
     
      二、接口存在的原因:
            java是单继承的,一个类只能有一个父类,但一个类可以实现(可以理解为继承)多个接口 ,接口中可以声明一些方法,当父类实现了这些方法,子类就能继承到父类中的这些方法。这充分发展了软件的灵活性和可扩展性。   

       三、类实现接口的格式:
              public class  类名 implements 接口名(,接口名....)

      四、接口继承接口的格式:
               public interface 接口名  extends 接口名(,接口名....)


                           事件机制
    
        一、事件:
                事件是用户在界面上的一个操作(通常使用各种输入设备,如:鼠标、键盘等来完成)。
           当一个事件发生时,该事件用一个事件对象来表示。事件对象有对应的事件类。不同的事件类描述不同类型的用户动作。事件类包含在java.awt.event和javax.swing.event包中。

        二、事件源:
              产生事件的组件叫事件源。在一个按钮上单击鼠标时,该按钮就是事件源,会产生一个ActionEvent类型的事件。

        三、事件处理器(事件处理方法):
               事件处理器是一个接收事件对象并进行相应处理的方法。事件处理器包含在一个类中,这个类的对象负责检查事件是否发生,若发生就激活事件处理器进行处理。

        四:事件监听器类:
                包含事件处理器,并负责检查事件是否发生,若发生就激活事件处理器进行处理的类叫做事件监听器类。其实例就是事件监听器对象。事件监听器类必须实现事件监听器接口或继承事件监听器适配器类。
          事件监听器接口定义了处理事件必须实现的方法。事件监听器适配器类是对事件监听器接口的简单实现。目的是为了减少编程的工作量。
事件监听器接口和事件监听器适配器类也都包含在java.awt.event和javax.swing.event包中。

        五、注册事件监听器:
                   为了能够让事件监听器检查某个组件(事件源)是否发生了某些事件,并且在发生时激活事件处理器进行相应的处理,必须在事件源上注册事件监听器。这是通过使用事件源组件的以下方法来完成的:
addXxxListener(事件监听器对象)
Xxx对应相应的事件类。

        六、事件监听器类的编写
                    1.在事件监听器类的声明中指定要实现的监听器接口名,如:
public class MyListener implements XxxListener {

}
        2.实现监听器接口中的事件处理方法,如:
public void 事件处理方法名(XxxEvent e) {
...//处理某个事件的代码...
}
然后,在一个或多个组件上可以进行监听器类的实例的注册。如:组件对象.addXxxListener(MyListener对象);

  练习:
           1.实现QQ界面的登录功能
2.实现计算器的+、-、*、/运算功能


QQ界面登陆功能的代码:
       import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;

import javax.swing.ImageIcon;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;


//建立一个QQFrame类
public class QQLogin {
    // 程序入口
public static void main(String[] args) {

QQLogin qq = new QQLogin();
qq.showLogin();
        }
//声明一个全局的对象名
private LoginListener ll = null ;

// 显示一个加有多个组件的窗体界面
public void showLogin() {

// 构造一个窗体对象
javax.swing.JFrame login = new javax.swing.JFrame();
//设置背景图片
addBackgroundImage(login);

// 设置标题
login.setTitle("QQ 2013");
// 创建流式布局管理器对象
java.awt.FlowLayout fl = new java.awt.FlowLayout();
login.setLayout(fl);
//创建面板对象并设置大小
javax.swing.JPanel jpanel1=new javax.swing.JPanel();
jpanel1.setPreferredSize(new Dimension(400,120));
javax.swing.JPanel jpanel2=new javax.swing.JPanel();
jpanel2.setPreferredSize(new Dimension(250,150));
javax.swing.JPanel jpanel3=new javax.swing.JPanel();
jpanel3.setPreferredSize(new Dimension(100,150));
javax.swing.JPanel jpanel4=new javax.swing.JPanel();
jpanel4.setPreferredSize(new Dimension(200,70));
javax.swing.JPanel jpanel5=new javax.swing.JPanel();
jpanel5.setPreferredSize(new Dimension(150,70));
//设置面板布局
jpanel2.setLayout(new FlowLayout(FlowLayout.LEFT));
//创建一个标签元素
javax.swing.JLabel jla_title = new javax.swing.JLabel("QQ 2013");
jla_title.setFont(new Font("正楷",Font.BOLD,56));
//将组件添加到面板1
jpanel1.add(jla_title);
// 创建2个标签元素:
javax.swing.JLabel jla_ID = new javax.swing.JLabel("注册账号");
javax.swing.JLabel jla_password = new javax.swing.JLabel("找回密码");

//创建一个下拉框
javax.swing.JComboBox jco=new javax.swing.JComboBox();
jco.setEditable(true);//设置下拉框可以编辑
jco.addItem("997188229");// 给下拉框添加数据
jco.setPreferredSize(new Dimension(180, 25));//设置下拉框大小
//创建一个密码框
JPasswordField jpa=new JPasswordField();
jpa.setPreferredSize(new Dimension(180,25));//设置密码框大小
//实例化一个LoginListener事件处理类的对象ll,
//同时将账号和密码输入框对象通过构造方法传入到LoginListener类中
ll = new LoginListener(jco,jpa,login);
// 实例化复选框的对象
JCheckBox jch1 = new JCheckBox("记住密码");
JCheckBox jch2 = new JCheckBox("自动登录");
//将组件元素添加到面板2
jpanel2.add(jco);
jpanel2.add(jla_ID);
jpanel2.add(jpa);
jpanel2.add(jla_password);
jpanel2.add(jch1);
jpanel2.add(jch2);
//创建图片
javax.swing.ImageIcon ima=new javax.swing.ImageIcon();
javax.swing.JLabel jla_ima = new javax.swing.JLabel(ima);
jpanel3.add(jla_ima);
// 实例化一个ImageIcon的图标对象
ImageIcon image = new ImageIcon("src/image/girl.jpg");
// 实例化一个标签对象
JLabel jlaImage = new JLabel(image);
// 将标签对象添加到面板上
jpanel3.add(jlaImage);
// 创建三个按钮
javax.swing.JButton jbu_login = new javax.swing.JButton("登陆");
javax.swing.JButton jbu_muchID= new javax.swing.JButton("多账号");
javax.swing.JButton jbu_set= new javax.swing.JButton("设置");
//给事件源添加一个监听器方法,同时绑定事件处理类的对象ll
jbu_login.addActionListener(ll);
jpanel4.add(jbu_muchID);
jpanel4.add(jbu_set);
jpanel5.add(jbu_login);
// 将面板组件加到窗体上
login.add(jpanel1);
login.add(jpanel3);
login.add(jpanel2);
login.add(jpanel4);
login.add(jpanel5);
login.setSize(400, 400);// 设置窗体大小
//面板设置为透明
jpanel1.setOpaque(false);
jpanel2.setOpaque(false);
jpanel3.setOpaque(false);
jpanel4.setOpaque(false);
jpanel5.setOpaque(false);

login.setDefaultCloseOperation(3);// 窗体关闭时程序退出
login.setResizable(false);//设置窗体为不可以调整大小
login.setVisible(true);// 让窗体显示出来,这句要放在最后面
     
}
/**
* 给窗体添加背景图标
*
* @param login窗体的对象
*/
public void addBackgroundImage(JFrame login) {
// 实例化一个ImageIcon的图标对象
ImageIcon image = new ImageIcon("src/image/bluesky.jpg");
// 实例化一个标签对象
JLabel background = new JLabel(image);
// 设置标签显示的位置和标签的大小
background.setBounds(0, 0, image.getIconWidth(), image.getIconHeight());
//将标签添加到窗体的第二层面板上
login.getLayeredPane().add(background,new Integer(Integer.MIN_VALUE));
//获取窗体的第一层面板对象
JPanel contentPanel = (JPanel)login.getContentPane();
//设置第一层面板为透明
contentPanel.setOpaque(false);
}

}


简单计算机的代码:
        package lesson7;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

//建立一个Counter类
public class Counter {
private CounterListener co = null;

/**
* 程序运行的入口点
*/
public static void main(String[] args) {
// 实例化一个Class类的对象
Counter cou = new Counter();
// 对象调用显示窗体的方法
cou.showFrame();

}

private JTextField jte = new JTextField();
private JFrame jf;

public void showFrame() {
// 实例化一个窗体对象并且设置标题
jf = new JFrame("简单计算器");
// 设置窗体的大小属性
jf.setSize(300, 330);
// 设置窗体的显示位置
jf.setLocation(200, 100);
// 设置窗体关闭时退出程序
jf.setDefaultCloseOperation(3);
// 设置窗体布局方式
// jf.setLayout(new FlowLayout());
co = new CounterListener(jf, jte);
JPanel northPanel = jp1();
jf.add(northPanel, BorderLayout.NORTH);

JPanel jp2 = jp2();
jf.add(jp2);
// 设置禁止调整窗体的大小
jf.setResizable(false);
// 设置窗体为可见
jf.setVisible(true);
}

// 创建面板1的方法
public JPanel jp1() {
// 实例化一个JPanel类的对象
JPanel jpanel1 = new JPanel();
// 设置对象面板的大小
jpanel1.setPreferredSize(new Dimension(0, 50));
// 实例化一个文本输入框对象
// JTextField jte=new JTextField(20);
jte.setPreferredSize(new Dimension(300, 40));
jte.setEditable(false);
// 添加组件到对象中
jpanel1.add(jte);
return jpanel1;
}

// 创建面板2的方法
public JPanel jp2() {
// 实例化一个JPanel类的对象
JPanel jp2 = new JPanel();
jp2.setLayout(new GridLayout(4, 4));
JButton jb0 = new JButton("0");
JButton jb1 = new JButton("1");
JButton jb2 = new JButton("2");
JButton jb3 = new JButton("3");
JButton jb4 = new JButton("4");
JButton jb5 = new JButton("5");
JButton jb6 = new JButton("6");
JButton jb7 = new JButton("7");
JButton jb8 = new JButton("8");
JButton jb9 = new JButton("9");
JButton jb10 = new JButton("+");
JButton jb11 = new JButton("-");
JButton jb12 = new JButton("*");
JButton jb13 = new JButton("/");
JButton jb14 = new JButton(".");
JButton jb15 = new JButton("=");

jp2.add(jb7);
jp2.add(jb8);
jp2.add(jb9);
jp2.add(jb13);
jp2.add(jb4);
jp2.add(jb5);
jp2.add(jb6);
jp2.add(jb12);
jp2.add(jb1);
jp2.add(jb2);
jp2.add(jb3);
jp2.add(jb11);
jp2.add(jb0);
jp2.add(jb14);

jp2.add(jb10);
jp2.add(jb15);

jb1.addActionListener(co);
jb2.addActionListener(co);
jb3.addActionListener(co);
jb4.addActionListener(co);
jb5.addActionListener(co);
jb6.addActionListener(co);
jb7.addActionListener(co);
jb8.addActionListener(co);
jb9.addActionListener(co);
jb10.addActionListener(co);
jb0.addActionListener(co);
jb11.addActionListener(co);
jb12.addActionListener(co);
jb13.addActionListener(co);
jb14.addActionListener(co);
jb15.addActionListener(co);

return jp2;
}

}

package lesson7;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JTextField;

/**
*
* @author pengyun
*
*/
public class CounterListener implements ActionListener{

private JFrame jf;
private JTextField jte;
private String sr,sb;
public CounterListener(JFrame jf,JTextField jte){
this.jf=jf;
this.jte = jte;
}
@Override
public void actionPerformed(ActionEvent e) {
sr = e.getActionCommand();
sb = jte.getText();
if(sr=="=") {
if(sb.contains("+")) {
String a=sb.substring(0, sb.indexOf("+"));
String b=sb.substring(sb.indexOf("+")+1);
int c=Integer.parseInt(a);
int d=Integer.parseInt(b);
int f=c+d;
String s=f+"";
jte.setText(s);
}
if(sb.contains("-")) {
String a=sb.substring(0, sb.indexOf("-"));
String b=sb.substring(sb.indexOf("-")+1);
int c=Integer.parseInt(a);
int d=Integer.parseInt(b);
int f=c-d;
String s=f+"";
jte.setText(s);
}
if(sb.contains("*")) {
String a=sb.substring(0, sb.indexOf("*"));
String b=sb.substring(sb.indexOf("*")+1);
int c=Integer.parseInt(a);
int d=Integer.parseInt(b);
int f=c*d;
String s=f+"";
jte.setText(s);
}
if(sb.contains("/")) {
String a=sb.substring(0, sb.indexOf("/"));
String b=sb.substring(sb.indexOf("/")+1);
int c=Integer.parseInt(a);
int d=Integer.parseInt(b);
double f=c/d;
String s=f+"";
jte.setText(s);
}
}
else if((sr=="0")||(sr=="1")||(sr=="2")||(sr=="3")||(sr=="4")||(sr=="5")||(sr=="6")||(sr=="7")||(sr=="8")||(sr=="9")||(sr=="+")||(sr=="-")||(sr=="*")||(sr=="/")){
sb = jte.getText()+sr;
jte.setText(sb);
}

     
}

}

分享到:
评论

相关推荐

    Android事件分发机制总结Demo

    本文将深入探讨“Android事件分发机制总结Demo”,结合代码实例MyTouchEventDemo,帮助开发者清晰理解这一核心概念。 事件分发机制主要涉及三个关键组件:View、ViewGroup(布局)和MotionEvent。当用户触摸屏幕时...

    java事件处理机制Demo

    在Java中,事件处理主要涉及到事件源、事件和事件监听器。本示例"java事件处理机制Demo"将深入探讨Java的观察者模式(Observer Pattern)及其在实际项目中的应用。 首先,我们来理解什么是观察者模式。观察者模式是...

    java事件处理机制详解

    Java事件处理机制是一种用于在组件之间传递和处理事件的机制,它是...开发者可以通过自定义事件和监听器来扩展这一机制,以适应各种复杂的交互需求。理解和掌握这一机制,对于编写功能丰富的Java GUI应用程序至关重要。

    微机接口期末考试个人总结

    ### 微机接口期末考试个人总结 #### 一、复习范围概述 本次期末考试主要针对《微机接口技术》这门课程进行全面考核。复习范围主要包括以下几个方面: 1. **微处理器与微控制器基础**:这部分内容是整个课程的基础...

    java事件处理机制

    总结一下,Java事件处理机制主要包括以下关键点: 1. 事件源:触发事件的对象,如按钮、文本框等。 2. 事件:由事件源产生的特定用户交互,如点击、按键等。 3. 事件监听器:实现特定接口的类,用于接收和处理事件...

    ipmi接口总结、ipmi接口总结、

    2. 支持异步事件通知机制:IPMB总线支持异步事件通知机制和危机事件日志机制,多主协议允许控制器抢占总线发送事件消息到事件接收器节点。 3. 提供可扩展的平台管理结构:IPMB总线提供一个可扩展的平台管理结构,新...

    JAVA事件处理机制.ppt

    总结来说,Java的事件处理机制使得开发者能够轻松地响应用户交互,创建出具有响应性的GUI应用。通过理解并熟练运用事件、事件源、事件处理器、监听器接口和监听器适配器,可以构建出丰富的用户交互体验。

    linux 内核网络接口通知链机制分析

    5.1 网络接口的UP事件和载波状态变化事件 5.1.1 载波状态变化事件 - `netif_carrier_on`: 当网络接口的物理连接建立,载波检测到信号时,会触发`netif_carrier_on`事件。这个事件的处理涉及到`dev_carrier_on`函数...

    C++接口实现总结

    这篇博客"《C++接口实现总结》"可能讨论了如何在C++中实现接口,以及它在实际开发中的应用。下面我们将详细探讨C++中实现接口的一些常见方法和相关知识点。 1. **抽象类(Abstract Class)**:C++通过包含纯虚函数...

    Android 事件处理机制

    总结,Android事件处理机制是构建用户友好、响应迅速的应用程序的基础。理解和熟练掌握事件冒泡、监听器以及消息队列的使用,能帮助开发者更好地设计和实现应用程序的交互逻辑。在实际开发中,灵活运用这些机制,...

    C#接口,委托与事件,事件异步轮询

    总结来说,接口定义了对象的行为标准,委托提供了方法调用的灵活性,而事件则是对象间通信的重要方式。通过结合这些特性,开发者可以构建出高效、可扩展的异步事件处理机制,如事件异步轮询,使得应用程序能够及时...

    flex事件机制分析

    Flex事件机制是Adobe Flex应用...总结,Flex事件机制是构建交互性应用的基础,理解并熟练掌握它能够帮助开发者编写出更加高效、响应迅速的Flex应用程序。通过合理地组织和管理事件,可以提高代码的可维护性和用户体验。

    Android基本控件事件总结

    本文将对Android的一些常见控件及其对应的事件进行总结,帮助开发者更好地理解和应用这些控件。 首先,Button(按钮)是最常见的控件之一,用于执行特定的操作。按钮的单击事件可以通过实现OnClickListener接口来...

    Java GUI编程中的事件处理机制详细讲解 (1)

    Java GUI编程中的事件大致可以分为两大类:组件类事件和动作类事件。 - **组件类事件**主要包括以下几种: - **ComponentEvent**: 当组件被创建或销毁时触发。 - **ContainerEvent**: 当容器内的组件发生变化时...

    提取redis事件机制源码为我所用

    事件分为读事件和写事件,当客户端与服务器之间的连接有数据可读或可写时,事件处理器会触发相应的回调函数。 1. **事件模型** Redis采用主循环(main loop)结构,不断地检查是否有待处理的事件。事件处理器通过...

    Java反射机制总结

    ### Java反射机制总结 #### 反射的概念与起源 反射的概念最早由Smith于1982年提出,指的是程序能够访问、检测并修改其自身状态或行为的能力。这一概念的提出迅速引起了计算机科学领域的广泛关注,并在之后的研究中...

    社区事件驱动机制-观察者模式实用

    总结来说,观察者模式在OECP社区中的应用展示了其在事件驱动系统中的价值,通过分离关注点,实现了系统的可扩展性和灵活性。通过定义清晰的被观察者和观察者角色,以及事件的产生和通知机制,使得社区能够高效地响应...

    java反射机制原理和反射机制总结

    总结,Java反射机制是Java平台灵活性和动态性的体现,它极大地扩展了Java程序的能力,但同时也需要谨慎使用,平衡好其带来的便利和潜在问题。学习和理解反射机制对于深入理解Java以及开发复杂系统至关重要。

    C#接口与事件编程借鉴.pdf

    总结来说,接口允许我们定义一组方法规范,强制类遵循这些规范,而事件则提供了在对象间通信和反应特定状态变化的机制。理解和熟练掌握这两种特性对于编写可扩展和模块化的C#应用程序至关重要。

Global site tag (gtag.js) - Google Analytics