Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I set a tooltip on a JPanel and its children?

I have a JPanel containing JButtons and a few other things, and I want the entire panel to have a tool-tip. When I call setToolTipText on the JPanel, the tool-tip only appears in empty spaces within the JPanel.

Is there a way to set a tool-tip on the JPanel such that it applies to the JPanel and its children, or am I stuck with calling setToolTipText on all the children as well?

like image 633
Arthur Ward Avatar asked Aug 30 '11 20:08

Arthur Ward


1 Answers

Create a recursive method:

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

    c.setToolTipText(text);

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

Full example:

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);
}
like image 153
dacwe Avatar answered Oct 05 '22 04:10

dacwe