import java.awt.*;
import java.awt.event.*;
class PictureButton extends Component {
private Image image;
boolean pressed = false;
ActionListener actionListener;
String actionCommand;
PictureButton(Image image) {
this.image = image;
MediaTracker mt = new MediaTracker(this);
mt.addImage( image, 0 );
try { mt.waitForAll(); } catch (InterruptedException e) { /* error */ };
setSize( image.getWidth(null), image.getHeight(null) );
enableEvents( AWTEvent.MOUSE_EVENT_MASK );
}
public void paint( Graphics g ) {
g.setColor(Color.white);
int width = getSize().width, height = getSize().height;
int offset = pressed ? -2 : 0; // fake depth
g.drawImage( image, offset, offset, width, height, this );
g.draw3DRect(0, 0, width-1, height-1, !pressed);
g.draw3DRect(1, 1, width-3, height-3, !pressed);
}
public Dimension getPreferredSize() {
return getSize();
}
public void processEvent( AWTEvent e ) {
if ( e.getID() == MouseEvent.MOUSE_PRESSED ) {
pressed = true;
repaint();
} else
if ( e.getID() == MouseEvent.MOUSE_RELEASED ) {
pressed = false;
repaint();
fireEvent();
}
super.processEvent(e);
}
public void setActionCommand( String actionCommand ) {
this.actionCommand = actionCommand;
}
public void addActionListener(ActionListener l) {
actionListener = AWTEventMulticaster.add(actionListener, l);
}
public void removeActionListener(ActionListener l) {
actionListener = AWTEventMulticaster.remove(actionListener, l);
}
private void fireEvent() {
if (actionListener != null) {
ActionEvent event = new ActionEvent( this,
ActionEvent.ACTION_PERFORMED, actionCommand );
actionListener.actionPerformed( event );
}
}
}
|