自己写了一个事件类,和事件监听器,为什么这个程序运行时说事件捕获不了?
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.util.*;
public class SimpleQueue
{
public static void main(String[] agrs)
{
MyFrame frame = new MyFrame();
frame.setPanel(new MyPanel());
frame.setTitle("Simple Queue");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}
}
class MyFrame extends JFrame
{
public MyFrame()
{
try
{
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
SwingUtilities.updateComponentTreeUI(this);
}
catch(Exception e)
{
e.printStackTrace();
}
Toolkit t = Toolkit.getDefaultToolkit();
Dimension d = t.getScreenSize();
int width = d.width;
int height = d.height;
setBounds(width/4, height/4, width/2, height/2);
}
public void setTitle(String t)
{
super.setTitle(t);
}
public void setPanel(JPanel panel)
{
Container c = getContentPane();
c.add(panel);
}
}
class MyPanel extends JPanel
{
public MyPanel()
{
JButton b = new MyButton();
b.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
SimpleEvent el = new SimpleEvent("try my own");
EventQueue queue = Toolkit.getDefaultToolkit().getSystemEventQueue();
queue.postEvent(el);
}
});
add(b);
}
class MyButton extends JButton implements SimpleListener
{
private EventListenerList listeners;
public MyButton()
{
super("My Own Event");
}
public void simpleAction(SimpleEvent e)
{
setBackground(Color.BLACK);
}
public void addSimpleListener(SimpleListener l)
{
listenerList.add(SimpleListener.class, l);
}
public void removeSimpleListener(SimpleListener l)
{
listenerList.remove(SimpleListener.class, l);
}
public void processEvent(AWTEvent event)
{
if (event instanceof SimpleEvent)
{
EventListener[] listeners = listenerList.getListeners(SimpleListener.class); //得到所有此类型的事件监听器
for (int i = 0; i < listeners.length; i++)
{
((SimpleListener)listeners[i]).simpleAction((SimpleEvent)event); //逐个的发送方法,典型的观察者模式的应用
}
}
else
{
super.processEvent(event); //如果不是该类,就让系统处理Event
}
}
}
}
class SimpleEvent extends AWTEvent
{
public SimpleEvent(String s)
{
super(s, SIMPLE_EVENT);
}
public static final int SIMPLE_EVENT = AWTEvent.RESERVED_ID_MAX + 5555;
}
interface SimpleListener extends EventListener
{
public void simpleAction(SimpleEvent e);
}