5

如何仅更改一个组件的工具提示颜色?

我知道您可以执行以下操作来更改工具提示颜色:

UIManager.put("ToolTip.background", new ColorUIResource(255, 247, 200)); 

但这会改变所有组件的工具提示背景,而不仅仅是一个。

有什么简单的解决办法吗?

4

4 回答 4

9

向@MadProgrammer 和@Reimeus +1 提供建议和示例。

这些都是正确的。

添加...

没有默认方法可以做到这一点。您必须扩展ToolTip该类,使用前景色和背景色创建自己的自定义ToolTip,然后扩展JComponents 类(JButton,JLabel等都是JComponents )并覆盖其createToolTip()方法并将您的自定义设置ToolTipJComponents ToolTip,如下所示:

这是我做的一个例子:

在此处输入图像描述

import java.awt.Color;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JToolTip;
import javax.swing.SwingUtilities;

/**
 *
 * @author David
 */
public class CustomJToolTipTest {

    private JFrame frame;

    public CustomJToolTipTest() {
        initComponents();
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new CustomJToolTipTest();
            }
        });
    }

    private void initComponents() {
        frame = new JFrame("Test");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setResizable(false);


        JButton button = new JButton("button") {
            //override the JButtons createToolTip method
            @Override
            public JToolTip createToolTip() {
                return (new CustomJToolTip(this));
            }
        };
        button.setToolTipText("I am a button with custom tooltip");

        frame.add(button);

        frame.pack();
        frame.setVisible(true);
    }
}

class CustomJToolTip extends JToolTip {

    public CustomJToolTip(JComponent component) {
        super();
        setComponent(component);
        setBackground(Color.black);
        setForeground(Color.red);
    }
}
于 2012-11-12T21:03:43.273 回答
6

您需要为JTooltip组件提供自定义。

看看JComponent#createToolTip

来自 Java 文档

返回用于显示工具提示的 JToolTip 实例。组件通常不会覆盖此方法,但它可用于使不同的工具提示以不同的方式显示。

于 2012-11-12T20:58:11.683 回答
5

没有标准的方法可以做到这一点,但您可以覆盖JComponent.createToolTip(). 这是一个按钮示例:

MyButton testButton = new MyButton("Move Mouse Over Button");
testButton.setToolTipText("Some text");

class MyButton extends JButton {

   public MyButton(String text) {
      super(text);
   }

   @Override
   public JToolTip createToolTip() {
      return (new MyCustomToolTip(this));
   }
}

class MyCustomToolTip extends JToolTip {
   public MyCustomToolTip(JComponent component) {
      super();
      setComponent(component);
      setBackground(Color.black);
      setForeground(Color.red);
   }
}
于 2012-11-12T21:01:53.587 回答
1

如果您可以访问源代码,我不会推荐这个。但如果没有,您可以利用 HTML 格式化功能更改颜色。

JButton b = new JButton();
b.setToolTipText("<html><div style='margin:0 -3 0 -3; padding: 0 3 0 3; background:green;'>My Text</div></html>");

您需要负边距,因为存在标准边距,否则不会着色。我们通过添加填充来弥补边距。3 px 似乎适用于金属 LAF。

于 2015-08-05T07:30:30.870 回答