This repository has been archived on 2024-04-22. You can view files and clone it, but cannot push or open issues or pull requests.
SecureUML-GUI/src/ch/ethz/infsec/secureumlgui/gui/MultiLineToolTipUI.java

102 lines
2.6 KiB
Java

/**
* http://www.codeguru.com/java/articles/122.shtml
*
* Author: Zafir Anjum
*/
package ch.ethz.infsec.secureumlgui.gui;
import javax.swing.*;
import javax.swing.plaf.*;
import java.awt.*;
import java.awt.font.*;
import java.awt.event.*;
import javax.swing.plaf.*;
import javax.swing.plaf.basic.BasicToolTipUI;
import javax.swing.text.*;
class MultiLineToolTipUI extends BasicToolTipUI {
static MultiLineToolTipUI sharedInstance = new MultiLineToolTipUI();
Font smallFont;
static JToolTip tip;
protected CellRendererPane rendererPane;
private static JTextArea textArea ;
public static ComponentUI createUI(JComponent c) {
return sharedInstance;
}
public MultiLineToolTipUI() {
super();
}
public void installUI(JComponent c) {
super.installUI(c);
tip = (JToolTip)c;
rendererPane = new CellRendererPane();
c.add(rendererPane);
}
public void uninstallUI(JComponent c) {
super.uninstallUI(c);
c.remove(rendererPane);
rendererPane = null;
}
public void paint(Graphics g, JComponent c) {
Dimension size = c.getSize();
textArea.setBackground(c.getBackground());
rendererPane.paintComponent(g, textArea, c, 1, 1,
size.width - 1, size.height - 1, true);
}
public Dimension getPreferredSize(JComponent c) {
String tipText = ((JToolTip)c).getTipText();
if (tipText == null)
return new Dimension(0,0);
textArea = new JTextArea(tipText );
rendererPane.removeAll();
rendererPane.add(textArea );
textArea.setWrapStyleWord(true);
int width = ((MultiLineToolTip)c).getFixedWidth();
int columns = ((MultiLineToolTip)c).getColumns();
if( columns > 0 )
{
textArea.setColumns(columns);
textArea.setSize(0,0);
textArea.setLineWrap(true);
textArea.setSize( textArea.getPreferredSize() );
}
else if( width > 0 )
{
textArea.setLineWrap(true);
Dimension d = textArea.getPreferredSize();
d.width = width;
d.height++;
textArea.setSize(d);
}
else
textArea.setLineWrap(false);
Dimension dim = textArea.getPreferredSize();
dim.height += 1;
dim.width += 1;
return dim;
}
public Dimension getMinimumSize(JComponent c) {
return getPreferredSize(c);
}
public Dimension getMaximumSize(JComponent c) {
return getPreferredSize(c);
}
}