事件监听机制:
A:事件源:事件发生的地方(对象)
B:事件:要发生的事情(接口)
C:事件处理:针对发生的事情做出的处理方案(实现的接口)
D:事件监听:把事件源和事件关联起来(操作)
首先我们先创建一个窗口
public class text2 {
public static void main(String[] args) {
Frame f = new Frame("窗口");
f.setBounds(400, 300, 400, 300);
//布局
f.setLayout(new FlowLayout());
//窗口可显示
f.setVisible(true);
}
}
问题:上面的程序不能关闭,需要加关闭窗口监听。
下面的程序用匿名内部类加监听,实现点击关闭
public class text2 {
public static void main(String[] args) {
Frame f = new Frame("数据转移");
f.setBounds(400, 300, 400, 300);
//布局
f.setLayout(new FlowLayout());
//关闭窗口监听
f.addWindowListener(new WindowListener() {
@Override
public void windowOpened(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowIconified(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowDeiconified(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowDeactivated(WindowEvent e) {
// TODO Auto-generated method stub
}
//我们只用到了这个,其他的都没用到
@Override
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
System.exit(0);
}
@Override
public void windowClosed(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowActivated(WindowEvent e) {
// TODO Auto-generated method stub
}
});
//窗口可显示
f.setVisible(true);
}
}
问题:看完上面的程序,我们可以发现,由于使用接口,就要实现其所有方法,这样使得代码不简洁。
下面用到适配器进行改进:用适配器类实现所有的接口方法(空实现),然后用哪个方法重写那个方法,看程序
public class text2 {
public static void main(String[] args) {
Frame f = new Frame("数据转移");
f.setBounds(400, 300, 400, 300);
//布局
f.setLayout(new FlowLayout());
//关闭窗口监听
f.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
System.exit(0);
}
});
//窗口可显示
f.setVisible(true);
}
}
监听例子1:按钮点击事件
public class FrameDemo02 {
public static void main(String[] args) {
Frame f = new Frame("数据转移");
f.setBounds(400, 300, 400, 300);
//布局
f.setLayout(new FlowLayout());
Button b = new Button("颜色变化");
f.add(b);
//按钮点击事件
b.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
f.setBackground(Color.RED);
}
});
//关闭窗口监听
f.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
System.exit(0);
}
});
//窗口可显示
f.setVisible(true);
}
}
监听例子2:鼠标点击事件
public class FrameDemo02 {
public static void main(String[] args) {
Frame f = new Frame("数据转移");
f.setBounds(400, 300, 400, 300);
//布局
f.setLayout(new FlowLayout());
Button b = new Button("颜色变化");
f.add(b);
//鼠标点击事件
b.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
f.setBackground(Color.RED);//鼠标进入
}
});
b.addMouseListener(new MouseAdapter() {
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
f.setBackground(Color.BLUE);
}
});
//关闭窗口监听
f.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
System.exit(0);
}
});
//窗口可显示
f.setVisible(true);
}
}