【问题标题】:How do I set a tooltip on a JPanel and its children?如何在 JPanel 及其子项上设置工具提示?
【发布时间】:2011-08-30 20:15:50
【问题描述】:

我有一个 JPanel,其中包含 JButton 和其他一些东西,我希望整个面板都有一个工具提示。当我在 JPanel 上调用 setToolTipText 时,工具提示只出现在 JPanel 内的空白处。

有没有办法在 JPanel 上设置工具提示,使其适用于 JPanel 及其子级,或者我是否也坚持对所有子级调用 setToolTipText?

【问题讨论】:

标签: java swing tooltip


【解决方案1】:

创建递归方法:

public static void setToolTipRecursively(JComponent c, String text) {

    c.setToolTipText(text);

    for (Component cc : c.getComponents())
        if (cc instanceof JComponent)
            setToolTipRecursively((JComponent) cc, text);
}

完整示例:

public static void main(String[] args) {

    final JFrame frame = new JFrame("Test");

    frame.add(new JLabel("Testing (no tooltip here)"), BorderLayout.NORTH);

    final JPanel panel = new JPanel(new GridLayout(2, 1));
    panel.setBackground(Color.RED);

    panel.add(new JLabel("Hello"));
    panel.add(new JTextField("World!"));

    setToolTipRecursively(panel, "Hello World!");

    frame.add(panel, BorderLayout.CENTER);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(400, 300);
    frame.setVisible(true);
}

【讨论】:

  • 在此解决方案中,工具提示在子组件之间交叉时会闪烁并更改位置。我已经发布了一个关于如何将容器视为一个单元的后续问题:stackoverflow.com/q/8592264/411282
  • 这会中断监听上层组件的点击。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-13
  • 1970-01-01
相关资源
最近更新 更多