接口和事件

来源:互联网 发布:淘宝上隐形文胸哪种好 编辑:程序博客网 时间:2024/06/05 19:58

接口和事件

一.背景简介

1.开发平台:Eclipse

2.开发语言: java语言

二.理论依据

1.接口

1)接口的定义

关键字 interface

格式 public interface 接口名extends 接口,……(可以有许多个父接口)

定义常量  public static final 数据类型 常量名=

定义抽象方法 public abstract 返回值类型 方法名(数据类型 参数名……);(可以有许多个参数)

注意a.常量与抽象方法前面的修饰符都是固定的,也可以不写,因为是默认的,可以直接写:数据类型 常量名=值,返回值类型 方法名。

      b.接口中的方法都是抽象的,所以()后不能接{}具体定义,必须用;结束这条语句。

      c.接口可以继承一个或者多个父接口

      d.接口只有一种访问修饰符public

      e.接口不能实例化对象

2)接口的实现

关键字 implement

格式 public class 类名extends 类名implement 接口,……{}(可以有好几个)

注意:a.类中必须要实现接口中的所有的抽象方法

      b.类不光可以继承类,还可以继承或者说是实现接口(可以好几个)

      C. Object是所有类的父类

3)类与接口的区别

a.关键字不同:类是class,接口是interface

b.定义格式不同:接口只能是public static final定义常量,public abstract定义抽象方法

c.修饰符不同:接口只能用public修饰,而类可以有四种:public private默认 protected

d.继承的父类个数不同:接口可以继承好几个,类只能继承一个父类,但可以继承好几个接口

e.实例化对象不同:接口不能实例化,只能放到类中实例化。

2.事件

1)事件源

定义:只有awt或者swing提供的容器组件或者是元素组件对象

如何确定事件源:动作所发生在的组件就是事件源

2)监听

主要有四种监听,监听四种动作,如果有这种动作,那么这个方法就会被激活,然后用方法中的参数对象,来调用对应的事件方法

addActionListenerActionListener l)类似按钮上的点击和类似输入框的键盘回车

addMouseActionListenerMouseListener l)事件源上是否有鼠标进入、离开、鼠标按键落下、鼠标按键松开

addMouseMotionListenerMouseMotionListener l )事件源上是否有鼠标移动或拖动

addKeyListenerKeyListener l)事件源上是否有键盘按键放下、释放和敲击

3)接口

ActionListener 动作事件接口

MouseListener 鼠标事件接口

MouseMotionListener 鼠标移动事件接口

KeyListener 键盘事件接口

因为接口不能实例化对象,所以需要定义类来实现对应的事件接口,实现接口中的抽象方法      

三.应用举例

已有一个登录界面,用接口和事件实现登录功能。

要求:a.在输入密码后敲击回车或者点击登录按钮,都能够进入另一个界面,原界面消失。

     b.只有输入争取的用户名和密码才能进入,错误则弹出提示框

 

1)修改原有的login1

import java.awt.Dimension;

import java.awt.FlowLayout;

import javax.swing.*;

//ctrl+alt+o自动添加import

public class Login1 extends JFrame{

public static void main(String[]args) {

// TODO Auto-generated method stub

Login1 lg=new Login1();

lg.initUI();

}

public void initUI(){

setTitle("登录");

setSize(300,400);

setLocationRelativeTo(null);

setDefaultCloseOperation(3);

setResizable(false);//不允许修改大小

setBackgroundImage();

FlowLayout fl=new FlowLayout();

setLayout(fl);

ImageIcon image=newImageIcon(

             this.getClass().getResource("aaa.png"));

JLabel labelimage=new JLabel(image);

add(labelimage);

JLabel label=new JLabel("账号");

add(label);

JTextField txtfield=new JTextField("admin");

txtfield.setPreferredSize(new Dimension(250,30));//文本框的大小

add(txtfield);

JLabel label1=new JLabel("密码");

add(label1);

JPasswordField password=new JPasswordField("1234567");

password.setPreferredSize(new Dimension(250,30));

add(password);

JCheckBox chb=new JCheckBox("自动登录");

chb.setPreferredSize(new Dimension(130,20));

chb.setOpaque(false);//透明化

add(chb);

JCheckBox chb1=new JCheckBox("记住密码");

chb1.setPreferredSize(new Dimension(130,20));

chb1.setOpaque(false);

add(chb1);

JButton button=new JButton("登录");

add(button);

setVisible(true);//设置JFrame可见

 

LoginListener listener=new LoginListener();//实例化监听类

listener.setUserText(txtfield,password,this);//把账号和密码输入框的对象借给listener

button.addActionListener(listener);//给按钮和密码添加监听

password.addActionListener(listener);

 

}

 

public void setBackgroundImage(){

ImageIcon image=new ImageIcon(

this.getClass().getResource("bbb.png"));

JLabel labelimage=new JLabel(image);

labelimage.setBounds(0, 0, image.getIconWidth(), image.getIconHeight());;

getLayeredPane().add(labelimage, new Integer(Integer.MIN_VALUE));//把这个面板放到最底下

JPanel countentPane=(JPanel)getContentPane();

countentPane.setOpaque(false);

}

}

2)定义LoginListener监听类

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JTextField;

//接口第一种情况的监听接口

public class LoginListener extends JFrameimplements ActionListener{

private JTextField txtfield,password;

private JFrame login1;//把需要像第一个界面借的东西定义出来

//定义“借”这个方法

public void setUserText(JTextFieldtxtfield,JTextField password,JFrame login1){

this.txtfield=txtfield;

this.password=password;

this.login1=login1;

}

//实例化ActionListener接口中的方法

public void actionPerformed(ActionEvente){

//获取输入框中的内容

String name=txtfield.getText();

String pass=password.getText();  

if("admin".equals(name)&&"1234567".equals(pass)){  

 //写第二个框的属性

setSize(400,500);

 setTitle("draw");

 setLocationRelativeTo(null);

setDefaultCloseOperation(2);

  setResizable(false);

setVisible(true);

  

JLabel label2=new JLabel("你终于进来了,真是心塞塞");

add(label2);

  login1.setVisible(false);

}else

{JOptionPane.showMessageDialog(null,"登录失败!");//提示框

  

  }

 

}}

 

注意:a.在验证是否能够进入第二个界面以及第一个界面消失的时候,需要用到第一个界面的账号输入框、密码输入框、第一个界面的主界面,这三个都需要第二个向第一个借,所以要定义“借”的方法和参数对象。

   b.将数遍放在接口事件上,按F3键,。可以在详细代码中快速找到接口中的方法,直接复制出来

c.提示框中,逗号前指的是相对于某个组件的正中央,null就是全屏正中央,如果写上login1,就是一直相对于login来说。

3)运行结果

a.登录界面 

  

b.成功登录后                                           登录失败时

                                                                                   

0 0
原创粉丝点击