commonsrc.ingenias.editor.editiondialog.JMultiLineToolTip Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of core Show documentation
Show all versions of core Show documentation
The INGENIAS Meta-Editor core. It is a set of facilities to generate an editor from a detailed xml description
package ingenias.editor.editiondialog;
//JMultiLineToolTip.java
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import javax.swing.CellRendererPane;
import javax.swing.JComponent;
import javax.swing.JTextArea;
import javax.swing.JToolTip;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.basic.BasicToolTipUI;
/**
* @author Zafir Anjum
* taken from http://code.google.com/p/simbrain/source/browse/branches/groupUpdateRefactor2012/src/org/simbrain/util/JMultiLineToolTip.java?r=2544
*/
public class JMultiLineToolTip extends JToolTip {
/** */
private static final String uiClassID = "ToolTipUI";
/** */
private String tipText;
/** */
private JComponent component;
/** */
public JMultiLineToolTip() {
updateUI();
}
/** */
public void updateUI() {
setUI(MultiLineToolTipUI.createUI(this));
}
/** @param columns number of columns */
public void setColumns(final int columns) {
this.columns = columns;
this.fixedwidth = 0;
}
/** @return columns */
public int getColumns() {
return columns;
}
/** @param width width */
public void setFixedWidth(final int width) {
this.fixedwidth = width;
this.columns = 0;
}
/** @return ret */
public int getFixedWidth() {
return fixedwidth;
}
/** */
protected int columns = 80;
/** */
protected int fixedwidth = 0;
}
/** */
class MultiLineToolTipUI extends BasicToolTipUI {
/** */
private static MultiLineToolTipUI sharedInstance = new MultiLineToolTipUI();
/** */
private Font smallFont;
/** */
private static JToolTip tip;
/** */
protected CellRendererPane rendererPane;
/** */
private static JTextArea textArea;
/** @param c component
* @return ret component*/
public static ComponentUI createUI(final JComponent c) {
return sharedInstance;
}
/** */
public MultiLineToolTipUI() {
super();
}
/** @param component */
public void installUI(JComponent c) {
super.installUI(c);
tip = (JToolTip) c;
rendererPane = new CellRendererPane();
c.add(rendererPane);
}
/** @param c component */
public void uninstallUI(final JComponent c) {
super.uninstallUI(c);
c.remove(rendererPane);
rendererPane = null;
}
/** @param g graphics
* @param c component
* */
public void paint(final Graphics g, final JComponent c) {
Dimension size = c.getSize();
textArea.setBackground(c.getBackground());
rendererPane.paintComponent(g, textArea, c, 1, 1,
size.width - 1, size.height - 1, true);
}
/** @param c component
* @return ret dimension */
public Dimension getPreferredSize(final 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 = ((JMultiLineToolTip) c).getFixedWidth();
int columns = ((JMultiLineToolTip) c).getColumns();
if (columns > 0) {
if (tipText.length()<80)
textArea.setColumns(40);
else
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;
}
/** @param c component
* @return ret dimension */
public Dimension getMinimumSize(final JComponent c) {
return getPreferredSize(c);
}
/** @param c component
* @return ret dimension */
public Dimension getMaximumSize(final JComponent c) {
return getPreferredSize(c);
}
}