接口及事件机制

我们知道,Java中类的继承只能是单继承,不允许多重继承,但是允许实现多个接口。下面我们来看接口以及相关抽象类的内容。
1、接口的定义与实现
定义接口的关键字:interface
格式:
public interface 接口名 extends 接口名,... {
//常量
public static final 数据类型 常量名 = 值;
//抽象方法
public 返回值数据类型 方法名(数据类型 参数名,...);
}
实现接口的关键字:implements
格式:
public class 类名 extends 类名 implements 接口名,... {
//实现接口中所有的抽象方法。
}
注意:类和接口的区别:
接口不能用来实例化对象。

2、抽象类的定义与实现
定义抽象类的关键字:abstract class
public abstract class 抽象类名 {
//定义类中所有的属性和方法
//定义接口中的常量和抽象方法
public abstract 返回值数据类型 方法名(数据类型 参数名,...);
}
public class 类名或者抽象类 extends 抽象类名 implements 接口名,... {
//实现接口中所有的抽象方法。
}
注意:
1)、如果是类去继承抽象类,那么类必须要实现所有的抽象方法。
2)、抽象类不能直接用来产生对象,必须通过对象的多态性进行实例化操作。

3、事件机制
1)、事件源
只有Java的图形界面类才能成为事件源.
只要点击的动作发生在图形界面对象上,那么该图形界面对象就是事件源。
2)、事件监听器方法
让事件源可以随时监听对应的操作。
事件源对象.add**Listener(**Listener l);
3)、事件处理类对象
事件处理类,事件要执行的最终代码。
public class 类名 implements **Listener {
//重写事件接口中的抽象方法
}

以QQ界面登陆实现为例。
package test0630;

import javax.swing.*;
import java.awt.*;


public class QQ {
public static void main(String[] args){
QQ q = new QQ();
q.jm();
}
//定义初始化界面的方法
public void jm(){
//实例化一个JFrame类的对象
JFrame jf = new JFrame();
//设置窗体大小
jf.setSize(400,310);
//设置窗体题目
jf.setTitle("2013 QQ");
jf.setLocationRelativeTo(null);
//设置窗体关闭
jf.setDefaultCloseOperation(3);
//设置窗体是否能改变大小
jf.setResizable(false);

//设置窗体布局
BorderLayout bl = new BorderLayout();
jf.setLayout(bl);

JLabel jlim = new JLabel();
jlim.setPreferredSize(new Dimension(369,142));
jf.add(jlim,BorderLayout.NORTH);


ImageIcon bkImage = new ImageIcon("image/bk.jpg");
JLabel blackground = new JLabel(bkImage);
//设置标签的大小
blackground.setBounds(0, 0, bkImage.getIconWidth(), bkImage.getIconHeight());
//将标签添加到LayeredPane的最底层
jf.getLayeredPane().add(blackground, new Integer(Integer.MIN_VALUE));
//将LayeredPane上一层的面板设置为透明
JPanel contentPanel = (JPanel)jf.getContentPane();
//设置面板为透明
contentPanel.setOpaque(false);




//实例化一个JPanel的容器对象
JPanel jpw = new JPanel();
FlowLayout fl = new FlowLayout();
jpw.setLayout(fl);
JLabel jli = new JLabel(new ImageIcon("image/psu.jpg"));
jli.setPreferredSize(new Dimension(75,82));
jpw.add(jli);
jpw.setOpaque(false);

jf.add(jpw,BorderLayout.WEST);

//实例化一个JPanel的容器对象
JPanel jpc = new JPanel();
FlowLayout fl2 = new FlowLayout(FlowLayout.LEFT);
jpc.setLayout(fl2);

JComboBox jcb = new JComboBox();
jcb.setEditable(true);
jcb.addItem("1111");
jcb.addItem("2211");
jcb.setPreferredSize(new Dimension(185,27));
JLabel jbu1 = new JLabel("注册账号");
JPasswordField jpf = new JPasswordField();
jpf.setPreferredSize(new Dimension(185,27));
JLabel jbu2 = new JLabel("找回密码");
JCheckBox jcb1 = new JCheckBox("记住密码");
JCheckBox jcb2 = new JCheckBox("自动登录");
jpc.add(jcb);
jpc.add(jbu1);
jpc.add(jpf);
jpc.add(jbu2);
jpc.add(jcb1);
jpc.add(jcb2);
jpc.setOpaque(false);

jf.add(jpc,BorderLayout.CENTER);

JPanel jps = new JPanel();
FlowLayout fl3 = new FlowLayout();
jps.setLayout(fl3);

JButton jb = new JButton("登 录");
jb.setActionCommand("Login");
jb.setPreferredSize(new Dimension(150,30));
jps.add(jb);

Login l = new Login(jcb,jpf);

jb.addActionListener(l);


jf.add(jps,BorderLayout.SOUTH);

jf.setVisible(true);
}


}

package test0630;

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

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextField;


public class Login implements ActionListener{

private JComboBox jcb;
private JPasswordField jpf;

public Login(JComboBox jcb,JPasswordField jpf){

this.jcb = jcb;
this.jpf = jpf;
}


@Override
public void actionPerformed(ActionEvent e) {

String value = e.getActionCommand();
System.out.println("你点击的是 :"+value);
Object value1 = jcb.getSelectedItem();
String value2 = jpf.getText();

if(value1.equals("123") && value2.equals("111")){

JFrame jf = new JFrame();
jf.setSize(400,300);
jf.setLocationRelativeTo(null);
jf.setTitle("QQ2013");
jf.setResizable(false);

jf.setVisible(true);

}else{

JOptionPane.showMessageDialog(null,
"你输入的账号或密码有错误,请重新输入!");
}


}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值