001: /*
002: * Copyright (c) 2000 Silvere Martin-Michiellot All Rights Reserved.
003: *
004: * Silvere Martin-Michiellot grants you ("Licensee") a non-exclusive,
005: * royalty free, license to use, modify and redistribute this
006: * software in source and binary code form,
007: * provided that i) this copyright notice and license appear on all copies of
008: * the software; and ii) Licensee does not utilize the software in a manner
009: * which is disparaging to Silvere Martin-Michiellot.
010: *
011: * This software is provided "AS IS," without a warranty of any kind. ALL
012: * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
013: * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
014: * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. Silvere Martin-Michiellot
015: * AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES
016: * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
017: * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
018: * Silvere Martin-Michiellot OR ITS LICENSORS BE LIABLE
019: * FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
020: * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
021: * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
022: * OR INABILITY TO USE SOFTWARE, EVEN IF Silvere Martin-Michiellot HAS BEEN
023: * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
024: *
025: * This software is not designed or intended for use in on-line control of
026: * aircraft, air traffic, aircraft navigation or aircraft communications; or in
027: * the design, construction, operation or maintenance of any nuclear
028: * facility. Licensee represents and warrants that it will not use or
029: * redistribute the Software for such purposes.
030: *
031: */
032:
033: package com.db.utils.heavytooltip;
034:
035: import java.awt.*;
036: import java.awt.event.*;
037: import javax.swing.*;
038: import java.util.*;
039:
040: // This code is repackaged after the code from Kovalan Muniandy
041: // Site http://www.cis.ohio-state.edu/~muniandy/
042: // Email muniandy@cis.ohio-state.edu
043:
044: public class ToolTip extends JPopupMenu implements Runnable {
045:
046: protected final int MAX_TEXT = 45;
047: final Font prefferedFont = new Font("Arial", Font.PLAIN, 10);
048: protected int timer = 4000;
049:
050: public ToolTip(String theText) {
051:
052: super ();
053: Vector text = new Vector();
054: text.add(theText);
055: init(text, -1);
056:
057: }
058:
059: public ToolTip(String theText, int theTimer) {
060:
061: super ();
062: Vector text = new Vector();
063: text.add(theText);
064: init(text, -1);
065:
066: }
067:
068: public ToolTip(Vector texts) {
069:
070: super ();
071: init(texts, -1);
072:
073: }
074:
075: protected void init(Vector texts, int theTimer) {
076:
077: if (theTimer != -1)
078: timer = theTimer;
079: setDefaultLightWeightPopupEnabled(false);
080: for (int i = 0; i < texts.size(); i++) {
081: String theText = (String) texts.get(i);
082: add(new ToolTipItem(theText));
083: }
084: setFont(prefferedFont);
085: Thread closer = new Thread(this );
086: closer.start();
087:
088: }
089:
090: public void run() {
091:
092: try {
093: Thread.sleep(timer);
094: setVisible(false);
095: setEnabled(false);
096: } catch (InterruptedException e) {
097: }
098:
099: }
100:
101: public void paint(Graphics g) {
102:
103: setBackground(Color.white);
104: super .paint(g);
105: Rectangle rect = getBounds();
106: g.setColor(Color.black);
107: g.drawRect(0, 0, rect.width - 1, rect.height - 1);
108:
109: }
110:
111: public Point getCenteredTextLoc(Graphics g, String text,
112: Rectangle bounds) {
113:
114: FontMetrics metrics = g.getFontMetrics();
115:
116: int width = metrics.charsWidth(text.toCharArray(), 0, text
117: .length());
118: int height = metrics.charsWidth(text.toCharArray(), 0, text
119: .length());
120:
121: if (width >= (int) bounds.getWidth()) {
122: text = text.substring(0, MAX_TEXT);
123: text += "...";
124: width = metrics.charsWidth(text.toCharArray(), 0, text
125: .length());
126: }
127:
128: return new Point((int) ((bounds.getWidth() - width) / 2.0),
129: (int) ((bounds.getHeight() - height) / 2.0));
130: }
131:
132: protected class ToolTipItem extends JMenuItem {
133:
134: public ToolTipItem(String theText) {
135:
136: super (theText);
137: setFont(prefferedFont);
138:
139: }
140:
141: public void paint(Graphics g) {
142:
143: setBackground(Color.white);
144: setArmed(false);
145: super.paint(g);
146:
147: }
148:
149: }
150:
151: }
|