如何在JPanel及其子设备上设置工具提示?

Art*_*ard 6 java swing tooltip

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

有没有办法在JPanel上设置工具提示,以便它适用于JPanel及其子代,或者我是否仍然坚持在所有子代上调用setToolTipText?

dac*_*cwe 7

创建递归方法:

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

    c.setToolTipText(text);

    for (Component cc : c.getComponents())
        if (cc instanceof JComponent)
            setToolTipRecursively((JComponent) cc, text);
}
Run Code Online (Sandbox Code Playgroud)

完整示例:

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);
}
Run Code Online (Sandbox Code Playgroud)