/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
package de.cismet.tools.gui.imagetooltip;
import java.awt.Dimension;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.JComponent;
import javax.swing.JToolTip;
import javax.swing.SwingUtilities;
import javax.swing.plaf.metal.MetalToolTipUI;
/**
* DOCUMENT ME!
*
* @author thorsten.hell@cismet.de
* @version $Revision$, $Date$
*/
public class ImageToolTip extends JToolTip {
//~ Constructors -----------------------------------------------------------
/**
* Creates a new instance of ImageToolTip.
*
* @param image DOCUMENT ME!
*/
public ImageToolTip(final Image image) {
setUI(new ImageToolTipUI(image));
}
//~ Inner Classes ----------------------------------------------------------
/**
* DOCUMENT ME!
*
* @version $Revision$, $Date$
*/
public class ImageToolTipUI extends MetalToolTipUI {
//~ Instance fields ----------------------------------------------------
private Image m_image;
//~ Constructors -------------------------------------------------------
/**
* Creates a new ImageToolTipUI object.
*
* @param image DOCUMENT ME!
*/
public ImageToolTipUI(final Image image) {
m_image = image;
}
//~ Methods ------------------------------------------------------------
/**
* This method is overriden from the MetalToolTipUI to draw the given image and text.
*
* @param g DOCUMENT ME!
* @param c DOCUMENT ME!
*/
@Override
public void paint(final Graphics g, final JComponent c) {
final FontMetrics metrics = c.getFontMetrics(g.getFont());
// Dimension size = c.getSize();
// g.setColor(c.getBackground());
// g.fillRect(0, 0, size.width, size.height);
g.setColor(c.getForeground());
g.drawString(((JToolTip)c).getTipText(), 3, 15);
g.drawImage(m_image, 3, metrics.getHeight() + 3, c);
}
/**
* This method is overriden from the MetalToolTipUI to return the appropiate preferred size to size the ToolTip
* to show both the text and image.
*
* @param c DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
@Override
public Dimension getPreferredSize(final JComponent c) {
final FontMetrics metrics = c.getFontMetrics(c.getFont());
String tipText = ((JToolTip)c).getTipText();
if (tipText == null) {
tipText = "";
}
int width = SwingUtilities.computeStringWidth(metrics, tipText);
final int height = metrics.getHeight() + m_image.getHeight(c) + 6;
if (width < m_image.getWidth(c)) {
width = m_image.getWidth(c);
}
return new Dimension(width, height);
}
}
}