简体   繁体   English

如何在Swing中设置工具提示的背景?

[英]How to set the background of tooltip in Swing?

I am developing a Swing application in which I need to show the tooltip for JTree nodes. 我正在开发一个Swing应用程序,我需要在其中显示JTree节点的工具提示。 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. 我在扩展JTree的类中覆盖了getToolTipText(MouseEvent e)方法。 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. 这也显示了一个工具提示,但是我的应用程序中其他组件的工具提示的外观和感觉与为Jtree节点显示的不同。

Please see the attached image of a desired look & feel of the tooltip. 请参阅工具提示所需外观的附图。 This tooltip is set on JTabbedPane. 此工具提示在JTabbedPane上设置。 在此输入图像描述

And here is the screenshot of the tooltip that is being displayed on Jtree: 以下是Jtree上显示的工具提示的屏幕截图: 在此输入图像描述

I tried html tags but that doesn't work. 我试过html标签,但这不起作用。 I also tried setting the look & feel of Jtree node tooltip by using following code, but this doesn't work either. 我还尝试使用以下代码设置Jtree节点工具提示的外观,但这也不起作用。 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? 有人可以告诉我如何设置我的JTree工具提示,如上图所示?

You can override the createToolTip method from JTree in your tree class: 您可以在树类中覆盖JTree中的createToolTip方法:

@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();
    }

}

这对我有用

UIManager.put("ToolTip.background", Color.white); UIManager.put("ToolTip.border",new LineBorder(Color.BLACK,1));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM