1. /*
  2. * @(#)MetalToolTipUI.java 1.13 01/11/29
  3. *
  4. * Copyright 2002 Sun Microsystems, Inc. All rights reserved.
  5. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
  6. */
  7. package javax.swing.plaf.metal;
  8. import java.awt.*;
  9. import java.awt.event.*;
  10. import javax.swing.*;
  11. import javax.swing.BorderFactory;
  12. import javax.swing.border.Border;
  13. import javax.swing.plaf.*;
  14. import javax.swing.plaf.basic.BasicToolTipUI;
  15. /**
  16. * A Metal L&F extension of BasicToolTipUI.
  17. * <p>
  18. * <strong>Warning:</strong>
  19. * Serialized objects of this class will not be compatible with
  20. * future Swing releases. The current serialization support is appropriate
  21. * for short term storage or RMI between applications running the same
  22. * version of Swing. A future release of Swing will provide support for
  23. * long term persistence.
  24. *
  25. * @version 1.13 11/29/01
  26. * @author Steve Wilson
  27. */
  28. public class MetalToolTipUI extends BasicToolTipUI {
  29. static MetalToolTipUI sharedInstance = new MetalToolTipUI();
  30. Font smallFont;
  31. static JToolTip tip;
  32. public static final int padSpaceBetweenStrings = 12;
  33. public MetalToolTipUI() {
  34. super();
  35. }
  36. public static ComponentUI createUI(JComponent c) {
  37. return sharedInstance;
  38. }
  39. public void installUI(JComponent c) {
  40. super.installUI(c);
  41. tip = (JToolTip)c;
  42. Font f = c.getFont();
  43. smallFont = new Font( f.getName(), f.getStyle(), f.getSize() - 2 );
  44. }
  45. public void paint(Graphics g, JComponent c) {
  46. super.paint(g, c);
  47. Font font = c.getFont();
  48. FontMetrics metrics = Toolkit.getDefaultToolkit().getFontMetrics(font);
  49. String keyText = getAcceleratorString();
  50. String tipText = ((JToolTip)c).getTipText();
  51. if (tipText == null) {
  52. tipText = "";
  53. }
  54. if (! (keyText.equals(""))) { // only draw control key if there is one
  55. g.setFont(smallFont);
  56. g.setColor( MetalLookAndFeel.getPrimaryControlDarkShadow() );
  57. g.drawString(keyText,
  58. metrics.stringWidth(tipText) + 3 + padSpaceBetweenStrings,
  59. 2 + metrics.getAscent());
  60. }
  61. }
  62. public Dimension getPreferredSize(JComponent c) {
  63. Dimension d = super.getPreferredSize(c);
  64. String key = getAcceleratorString();
  65. if (! (key.equals(""))) {
  66. FontMetrics fm = Toolkit.getDefaultToolkit().getFontMetrics(smallFont);
  67. d.width += fm.stringWidth(key) + padSpaceBetweenStrings;
  68. }
  69. return d;
  70. }
  71. public String getAcceleratorString() {
  72. JComponent comp = tip.getComponent();
  73. if (comp == null) {
  74. return "";
  75. }
  76. KeyStroke[] keys =comp.getRegisteredKeyStrokes();
  77. String controlKeyStr = "";
  78. for (int i = 0; i < keys.length; i++) {
  79. char c = (char)keys[i].getKeyCode();
  80. int mod = keys[i].getModifiers();
  81. int condition = comp.getConditionForKeyStroke(keys[i]);
  82. if ( mod == InputEvent.CTRL_MASK && condition == JComponent.WHEN_IN_FOCUSED_WINDOW) {
  83. controlKeyStr = "cntl+"+(char)keys[i].getKeyCode();
  84. break;
  85. } else if (mod == InputEvent.ALT_MASK && condition == JComponent.WHEN_IN_FOCUSED_WINDOW) {
  86. controlKeyStr = "alt+"+(char)keys[i].getKeyCode();
  87. break;
  88. }
  89. }
  90. return controlKeyStr;
  91. }
  92. }