i don't do that often this is a source code
/**
* @author Borie Jean-Francois
* @version 1.01, 05/07/01
* @sinceJDK1.1
*/
import java.awt.Canvas;
import java.awt.Image;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Font;
import java.awt.Event;
import java.awt.Cursor;
import java.awt.Toolkit;
import java.awt.image.FilteredImageSource;
import java.awt.image.CropImageFilter;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.MouseEvent;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
import java.awt.event.FocusListener;
import java.awt.event.FocusEvent;
public class ButtonCanvas extends Canvas
implements MouseListener, MouseMotionListener, KeyListener, FocusListener
{
private Image offScreenImage = null;
private Image ImgBackground = null;
private Image imgDown = null;
private Graphics _offScreen = null;
private String m_pText = new String("");
private Font font = new Font("Helvetica", Font.PLAIN, 10);
private int _x = 0;
private int _y = 0;
private int _width = 12;
private int _height = 12;
private boolean boolFocus = false;
private boolean boolDown = false;
private boolean boolRadioButton = false;
private Color down = new Color( 5, 213, 75 );
private boolean bimgup = false;
public ButtonCanvas(boolean flag)
{
boolRadioButton = flag;
addListener();
}
public ButtonCanvas(String str, boolean flag)
{
m_pText = str;
boolRadioButton = flag;
addListener();
}
public void setBounds(int x, int y, int w, int h)
{
super.setBounds(x, y, w, h);
_x = x;
_y = y;
_width = w;
_height = h;
offScreenImage = null;
_offScreen = null;
if(!bimgup)
ImgBackground = null;
repaint();
}
public void setSize(int w, int h)
{
super.setSize(w, h);
_width = w;
_height = h;
offScreenImage = null;
_offScreen = null;
if(!bimgup)
ImgBackground = null;
repaint();
}
public boolean getState()
{
return boolDown;
}
public void setState(boolean flag)
{
boolDown = flag;
repaint();
}
public void setIconDown(Image img)
{
imgDown = img;
}
public void setIconUp(Image img)
{
bimgup = true;
ImgBackground = img;
}
public void addListener()
{
this.addMouseListener(this);
this.addMouseMotionListener(this);
this.addKeyListener(this);
this.addFocusListener(this);
}
public void removeListener()
{
this.removeMouseListener(this);
this.removeMouseMotionListener(this);
this.removeKeyListener(this);
this.removeFocusListener(this);
}
public boolean isFocusTraversable()
{
return true;
}
public void focusGained(FocusEvent event)
{
boolFocus = true;
repaint();
}
public void focusLost(FocusEvent event)
{
boolFocus = false;
repaint();
}
public void mouseMoved(MouseEvent event )
{
this.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
event.consume();
}
public void mousePressed(MouseEvent event )
{
if(boolRadioButton)
{
if(boolDown)
boolDown = false;
else
boolDown = true;
}
else
{
boolDown = true;
boolFocus = true;
}
repaint();
event.consume();
}
public void mouseDragged(MouseEvent event )
{
event.consume();
}
public void mouseEntered(MouseEvent event )
{
event.consume();
}
public void mouseClicked(MouseEvent event )
{
event.consume();
}
public void mouseReleased(MouseEvent event )
{
if(!boolRadioButton)
{
boolDown = false;
boolFocus = false;
}
repaint();
this.getParent().dispatchEvent(new MouseEvent(this,MouseEvent.MOUSE_RELEASED,event.getWhen(),event.getModifiers(),event.getX(),event.getY(),event.getClickCount(),false));
event.consume();
}
public void mouseExited(MouseEvent event )
{
this.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
event.consume();
}
public void keyReleased(KeyEvent event)
{
switch(event.getKeyCode())
{
case KeyEvent.VK_ENTER :
case KeyEvent.VK_SPACE :
{
if(boolRadioButton)
{
if(boolDown)
boolDown = false;
else
boolDown = true;
this.getParent().dispatchEvent(new KeyEvent(this,KeyEvent.KEY_RELEASED,event.getWhen(),event.getModifiers(),event.getKeyCode(),event.getKeyChar()));
repaint();
}
else
{
this.getParent().dispatchEvent(new KeyEvent(this,KeyEvent.KEY_RELEASED,event.getWhen(),event.getModifiers(),event.getKeyCode(),event.getKeyChar()));
boolDown = false;
boolFocus = false;
}
}
default :
{
this.getParent().dispatchEvent(new KeyEvent(this,KeyEvent.KEY_RELEASED,event.getWhen(),event.getModifiers(),event.getKeyCode(),event.getKeyChar()));
break;
}
}
event.consume();
}
public void keyPressed(KeyEvent event)
{
if(!boolRadioButton)
{
boolDown = true;
boolFocus = true;
}
repaint();
event.consume();
}
public void keyTyped(KeyEvent event){}
private void paintBackground(Graphics g )
{
if(ImgBackground==null)
{
ButtonCanvasInterface parent = null;
while(this.getParent() instanceof ButtonCanvasInterface)
{
parent = (ButtonCanvasInterface)this.getParent();
if(!bimgup)
ImgBackground = Toolkit.getDefaultToolkit().createImage( new FilteredImageSource( parent.getBackgroundAsImage().getSource() , new CropImageFilter( _x, _y, _width, _height)));
g.drawImage(ImgBackground, 0, 0, this);
break;
}
}
else
{
g.drawImage(ImgBackground, 0, 0, this);
}
}
public void paint(Graphics g )
{
if((_offScreen != null)&&(offScreenImage != null))
{
_offScreen.setPaintMode();
if(!boolRadioButton)
{
if(imgDown == null)
{
paintBackground(_offScreen);
}
else
{
if(!boolDown)
paintBackground(_offScreen);
else
_offScreen.drawImage( imgDown , 0, 0, this);
}
}
else
{
if(boolDown)
{
if(imgDown == null)
{
_offScreen.setColor(down);
_offScreen.fillRect(0,0, _width, _height);
_offScreen.setColor(Color.white);
_offScreen.setFont(font);
_offScreen.drawString(m_pText,2,_height-2);
}
else
_offScreen.drawImage( imgDown , 0, 0, this);
}
else
{
paintBackground(_offScreen);
_offScreen.setColor(Color.white);
_offScreen.setFont(font);
_offScreen.drawString(m_pText,2,_height-2);
}
if(imgDown == null)
if(boolFocus)
{
_offScreen.setColor(Color.yellow);
_offScreen.drawRect(0,0, _width-1, _height-1);
}
}
/*
_offScreen.setColor(Color.white);
_offScreen.drawRect(0,0,_width-1,_height-1);
*/
if(this.prepareImage( offScreenImage, _width, _height, this ));
g.drawImage( offScreenImage , 0, 0, this);
}
else
{
update(g);
}
g.dispose();
g.finalize();
return;
}
public void update(Graphics g)
{
if( offScreenImage == null)
offScreenImage = this.createImage( _width, _height );
if( _offScreen == null)
_offScreen = offScreenImage .getGraphics();
paint(g);
}
}
import java.awt.Image;
public interface ButtonCanvasInterface
{
public Image getBackgroundAsImage();
}
jef06 at 2007-7-1 16:52:50 >
