【问题标题】:How to set the background of tooltip in Swing?如何在 Swing 中设置工具提示的背景?
【发布时间】:2015-01-10 10:20:07
【问题描述】:

我正在开发一个 Swing 应用程序,我需要在其中显示 JTree 节点的工具提示。节点代表某些任务并按顺序在独立的线程中运行。我需要根据任务的当前状态更改工具提示。

我在扩展 JTree 的类中覆盖了 getToolTipText(MouseEvent e) 方法。这也显示了一个工具提示,但我的应用程序中其他组件的工具提示的外观与 Jtree 节点显示的不同。

请查看随附的工具提示所需外观的图片。此工具提示设置在 JTabbedPane 上。

这是 Jtree 上显示的工具提示的屏幕截图:

我尝试了 html 标签,但这不起作用。我还尝试使用以下代码设置 Jtree 节点工具提示的外观,但这也不起作用。我在下面使用的颜色代码与上面所需工具提示中显示的颜色代码相同:

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);

谁能告诉我如何设置我的 JTree 工具提示,如上图所示?

【问题讨论】:

    标签: java swing jtree


    【解决方案1】:

    您可以在树类中覆盖 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;
    }
    

    示例

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

    【讨论】:

    • 试过了,但没有运气:(
    • 嗯好的,现在我很好奇,想用一个小例子来测试一下。这是一个工作示例(请参阅我的编辑)。您可以尝试使其适应您的项目。让我知道它是否有效。
    • 实际上,是的,我也可以在示例应用程序中更改工具提示的背景。但在我的主要应用程序中它不起作用。我不知道为什么。当我添加了三态复选框、状态指示器和节点时,我正在使用 Jtree 的定制版本。但我接受你的回答,谢谢。
    • 没问题。太糟糕了,它不适合你。我可以尝试帮助您,但是如果没有任何进一步的代码,很难看出问题出在哪里。否则我希望你能弄清楚。祝你好运
    【解决方案2】:

    这对我有用

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

    【讨论】:

      猜你喜欢
      • 2012-12-29
      • 2015-06-28
      • 1970-01-01
      • 2011-11-26
      • 2017-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-07
      相关资源
      最近更新 更多