This code shows how to create a new event using AWTEventMulticaster.
import java.awt.*;import java .awt.event.*;class Buton extends Component{ private Image button_pressed,button_released; private boolean press=false; ActionListener actionListener; public Buton(){ button_pressed=Toolkit.getDefaultToolkit().getImage("?"); //pressed button button_released=Toolkit.getDefaultToolkit().getImage("?"); //released button MediaTracker mt = new MediaTracker(this); mt.addImage(button_pressed,0);mt.addImage(button_released,1); try { mt.waitForAll(); } catch (InterruptedException e) {System.out.println(e.getMessage()); } enableEvents( AWTEvent.MOUSE_EVENT_MASK ); setSize( button_pressed.getWidth(null),button_pressed.getHeight(null) ); } public Dimension getPreferredSize(){ return getSize(); } public void paint(Graphics g){ if(press)g.drawImage(button_pressed,0,0, this); if(!press)g.drawImage(button_released,0,0,this); } public void update(Graphics g){paint(g);} public void processEvent(AWTEvent e){ if (e.getID()==MouseEvent.MOUSE_PRESSED){ press=true;repaint(); } if (e.getID()==MouseEvent.MOUSE_RELEASED){ press=false;repaint();Event(); } super.processEvent(e); } public void addActionListener(ActionListener l){ actionListener=AWTEventMulticaster.add(actionListener, l); } public void removeActionListener(ActionListener l){ actionListener=AWTEventMulticaster.remove(actionListener, l); } private void Event(){ if (actionListener!=null){ ActionEvent t=new ActionEvent(this,ActionEvent.ACTION_PERFORMED,"press"); actionListener.actionPerformed(t); } }}