Reputation: 1582
I am developing a Swing application in which I need to show the tooltip for JTree nodes. The nodes represent certain tasks and run in an independent threads sequentially. I need to change the tooltip as per the current status of the tasks.
I overrode getToolTipText(MouseEvent e) method in a class that extends JTree. This shows a tooltip too, but the look & feel of the tooltip of other components in my application is different than what is shown for Jtree nodes.
Please see the attached image of a desired look & feel of the tooltip. This tooltip is set on JTabbedPane.
And here is the screenshot of the tooltip that is being displayed on Jtree:
I tried html tags but that doesn't work. I also tried setting the look & feel of Jtree node tooltip by using following code, but this doesn't work either. The color codes I used below are same as the ones shown in desired tooltip above:
UIManager.put("ToolTip.background", new ColorUIResource(255, 247, 200)); // The color is #fff7c8.
Border border = BorderFactory.createLineBorder(new Color(76,79,83)); // The color is #4c4f53.
UIManager.put("ToolTip.border", border);
Can someone please tell me how can I set my JTree tooltip as shown in a desired image above?
Upvotes: 3
Views: 2700
Reputation: 113
This worked for me
UIManager.put("ToolTip.background", Color.white);
UIManager.put("ToolTip.border",new LineBorder(Color.BLACK,1));
Upvotes: 1
Reputation: 608
You can override the createToolTip
method from JTree
in your tree class:
@Override
public JToolTip createToolTip()
{
JToolTip tooltip = super.createToolTip();
tooltip.setBorder(BorderFactory.createLineBorder(new Color(76,79,83)));
tooltip.setBackground(new Color(255, 247, 200));
return tooltip;
}
Example:
import java.awt.Color;
import java.awt.event.MouseEvent;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JToolTip;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
public class Main
{
public static void main(String[] args)
{
JFrame frame = new JFrame("Tooltip Example");
frame.setSize(500, 500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Node root = new Node("Root", "Root Tooltip");
MyTree tree = new MyTree(root);
root.add(new Node("Child 1", "Tooltip 1"));
root.add(new Node("Child 2", "Tooltip 2"));
tree.setToolTipText(""); // The correct tooltips will be shown on each node.
frame.add(tree);
frame.setVisible(true);
}
}
class Node extends DefaultMutableTreeNode
{
String toolTip;
public Node(String name, String toolTip)
{
super(name);
this.toolTip = toolTip;
}
public String getToolTipText()
{
return toolTip;
}
}
class MyTree extends JTree
{
MyTree(TreeNode node)
{
super(node);
}
@Override
public JToolTip createToolTip()
{
JToolTip tooltip = super.createToolTip();
tooltip.setBorder(BorderFactory.createLineBorder(new Color(76,79,83)));
tooltip.setBackground(new Color(255, 247, 200));
return tooltip;
}
@Override
public String getToolTipText(MouseEvent event)
{
super.getToolTipText(event);
if(getRowForLocation(event.getX(), event.getY()) == -1)
return null;
TreePath path = getPathForLocation(event.getX(), event.getY());
return ((Node) path.getLastPathComponent()).getToolTipText();
}
}
Upvotes: 5