import java.awt.AlphaComposite;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.Stroke;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import javax.swing.JComponent;
import javax.swing.JFrame;
public class ImageToolTipDemo extends JFrame {
	
	class ImageHoverPanel extends JComponent {
		private Image image, bgImg;
		BufferedImage mask;
		private int imgX, imgY;
		
		public ImageHoverPanel(Image hoverImg, Image bgImg) {
			this.image = hoverImg;
			this.bgImg = bgImg;
			this.createAlphaMask();
			this.setPreferredSize(new Dimension(imgX + hoverImg.getWidth(null), imgY + hoverImg.getHeight(null)));
			this.setToolTipText("");
		}
		
		public void paintComponent(Graphics g) {
			super.paintComponent(g);
			if (bgImg!=null)
				g.drawImage(bgImg, imgX, imgY, null);
			g.drawImage(image, imgX, imgY, null);
		}
		
		public String getToolTipText(MouseEvent evt) {
			int x = evt.getX()- imgX;
			int y = evt.getY() -imgY;
			if (x>=0 && x<mask.getWidth() && y>=0 && y<mask.getHeight()) {
				if (mask.getRGB(x, y)==0)
					return "Transparent Area. Here the tootip can be set to null!";
				else
					return "Image Area";
			}
			return null;
		}
		
		private void createAlphaMask() {
			int w = image.getWidth(null);
			int h = image.getHeight(null);
			mask = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
			Graphics2D g = (Graphics2D)mask.getGraphics();
			g.drawImage(image, 0, 0, null);
			g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP));
			g.setColor(Color.BLACK);
			g.fillRect(0, 0, w, h);
			g.dispose();
		}
	}
	
	public ImageToolTipDemo() {
		add(new ImageHoverPanel(createAlphaImage(200, 200), null));
	}
	
	private BufferedImage createAlphaImage(int w, int h) {
		BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
		Graphics2D g2 = image.createGraphics();
		g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
		g2.setColor(Color.RED);
		g2.fillOval(10, 10, w-50, h-50);
		g2.setColor(Color.BLUE);
		g2.fillRect(15, 5, 20, h-10);
		Stroke stroke = new BasicStroke(5);
		g2.setStroke(stroke);
		g2.setColor(Color.GREEN);
		g2.drawPolygon(new int[] {5, w/2-5, w-10, w/2+15, w-2, w/2+15}, new int[] {h/2, h/2-5, 2, h/2, h/2, h-20}, 6);
		g2.dispose();
		return image;
	}
	
	public static void main(String[] args) {
		JFrame frame = new ImageToolTipDemo();
		frame.setBounds(0, 0, 500, 300);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}