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);
}
}