全部代码:
package test;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
public class test3 extends JFrame implements ActionListener {
JButton jb1 =new JButton("你点我啊!");
JButton jb2 =new JButton("你点不着我吧!");
public test3(){
initJFrame();
initJButton();
//显示整体窗体(true是显示,false是关闭),写在最后
this.setVisible(true);
}
public void initJFrame() {
//设置尺寸(单位是尺寸)
this.setSize(603,680);
//设置标题
this.setTitle("事件演示");
//设置窗口在页面置顶
this.setAlwaysOnTop(true);
//设置界面居中生成位置,利用null
this.setLocationRelativeTo(null);
//设置关闭模式
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
//取消加载图片的默认居中
this.setLayout(null);
}
public void initJButton(){
//给按钮设置位置和宽高
jb1.setBounds(0,0,100,50);
//给按钮添加事件
jb1.addActionListener(this);
jb2.setBounds(0,100,120,50);
jb2.addActionListener(this);
this.getContentPane().add(jb1);
this.getContentPane().add(jb2);
}
@Override
public void actionPerformed(ActionEvent e) {
//获取当前被操作的按钮对象
Object s = e.getSource();
if (s==jb1){
jb1.setSize(200,100);
}else if (s==jb2){
Random r =new Random();
jb2.setLocation(r.nextInt(500),r.nextInt(500));
}
}
}
注意看这里的this是一个JFrame对象
这里this是写在了initJFrame类的构造方法中的,所以代表initJFrame的对象,在创建test3这个类时,已经承接了ActionListerner这个接口,因为接口的多态,所以this可以是ActionListerner的实现类对象,所以自动调用所有重写的方法
addActionListener这个方法的作用是传入对象后会调用重写的actionPerformed方法
加深理解:如果不用this
要创建实现类:
才能调用该方法
this的使用可以理解为接口的多态,任意一个实现类对象均可以承接这个接口