//Inner class 事件处理例一
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class Win extends JFrame
{
JButton btn;
Police police;
Win()
{
setTitle("键盘按钮");
setBounds(100,100,200,200);
setLayout(new FlowLayout());
btn = new JButton("点我或者按A");
police = new Police();
btn.addActionListener(police);
btn.addKeyListener(police);
add(btn);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
class Police extends KeyAdapter implements ActionListener
{
JButton b;
public void actionPerformed(ActionEvent e)
{
b = new JButton();
b = (JButton)e.getSource();
b.setLocation(10 + b.getBounds().x, 10 + b.getBounds().y);
}
public void keyPressed(KeyEvent k)
{
if(k.getKeyCode() == KeyEvent.VK_A)
{
b = (JButton)k.getSource();
b.setLocation(10 + b.getBounds().x, 10 + b.getBounds().y);
}
}
}
}
//主类
public class test
{
public static void main(String args[])
{
Win win = new Win();
}
}
这样不管是点击按钮或者是键盘a都可以使按钮发生位移
注:
1.实例化监听器很重要,也就是police = new Police()
,如果不实例化,没有办法完成响应的
2.实现监听器类的时候
①如果这个监听器需要和某些组件实现交互,我们就要在这个类里面的成员属性添加这个组件
②在函数中首先实例化这个组件,然后使用参数事件的getSource()
获得交互组件,使这个交互组件强制转化为我们需要的组件,然后赋值给我们新建的组件,这样我们就和响应函数建立起了联系